面向对象
结构化编程和面向对象编程
- 在Java中,围绕要解决问题的对象来设计,我们通过类来描述对的属性和行为。把其中的一切都当成对象来描述
- 类与对象是相辅相成的,类是对象,对象是类的实例.
- 对象的每个属性被表示为类中的一个成员变量,对象的每个行为成为类中的一个方法
类
类是拥有共同属性的对象的集合。创建一个新的对象要用到关键字New,New+类名表示实例化一个新的对象,例如:
public class Name(){}
建立一个其他的类
public class Other(){
Name name=new Name();//这就表示实例化一个新的对象
}
实例化后,它拥有类的所有属性和方法。
构造函数
在每次new一个对象的时候我们都会通过一个模板来创建,而这个模板就是构造函数。java中默认有构造函数,只是未写出,对象的实例化都是通过构造函数。
如果没有写构造函数,系统会默认创建一个无参的构造函数,如果写了,系统就不再创建,对象的实例化就会通过你的构造函数来进行。
构造函数与其他方法的区别
- 构造函数的名称必须和类的名字相同
- 构造函数没有返回值,也不能声明返回值
public class Test{ public Test(){ super();}//无参的构造函数 public Test(int a){ super();}//有参数的构造函数 }
添加多个构造函数的时候,需要应用方法的重载,每个构造函数必须有一个唯一的形参列表。 在构造函数中有super()这个方法,这代表可以调用父类的方法
super.方法名
。在所有对象中,他们的根就是object,所以默认的super就是代表的object
this关键字
在多个构造函数中,可以用this关键字来调用其他构造函数,该this语句必须在该构造函数的第一行,否则会发生错误。
public class Test{
int a=0;
public Test(){
this(b);}//a是实参,可以是任意int类型的
public Test(int a){
this.a=a}}//把接收到的a的值赋给开始定义的a
继承(extends)
- 在面向对象编程中,通过拓展一个已有的类,并继承该类的属性和行为,来创建一个新的类,这种方式成为继承
- 继承中,已有的类称为父类。新的类称为子类。父类可以称为基类、超类
public class Student{ public void say(){//声明实现一个方法 System.out.print("被继承了");}} //新建一个类去继承Student public class Test extends Student{ public void test(){ this.say();}通过this或是super关键字来调用父类的方法 @Override//重写父类的方法 public void say(){} }
在面向对象编程中,当两个或是多个类不相同,但是拥有共同的特征的时候,我们将共同的元素拿出来放到一个父类中。这样使用继承不仅可以重用已有的代码避免代码重复,还可以创建一个易于维护和修改代码的程序
继承中可以使用“is a”关系来判断父类和子类的继承关系是否正确。当使用继承时,我们必须能够说子类is a (是一个)父类,如果是对的,那么继承关系就是正确的
Java中子类只能继承一个父类,但是父类也能拥有父类
方法重写
- 子类的返回值类型、方法名和形式参数列表,必须和父类中的是相同的。如果子类中的方法与父类中的方法同名,但是子类中的方法改变了形式参数列表,这是方法重载而不是重写了
- 访问修饰符必须不小于父类中的访问修饰符
final关键字
- final类 一个类可以声明为最终类的。最终类不能被有子类
- final方法 一个方法可以声明为最终的,最终方法不能被重写
public final class Student{}
final方法 当子类重写父类的一个方法时,父类中被重写的方法实质上是被隐藏了。在子类中,要调用父类中的方法,唯一的方法是显示的调用。如果不想子类重写,可以将该方法声明为最终的方法。最终方法不能被子类重写
访问修饰符
- public(公开访问级别):用public关键字修饰的成员对外公开,即公开成员可以被任何其他对象访问
- protect(受保护访问级别):用protect关键字修饰,受保护成员可以被同一包中的类所访问,还可以被类的子类访问,不管子类在哪个包中
- 没有访问修饰符(默认访问级别):默认的访问级别的成员可以被同一包中的其他类所访问
- private(私有访问级别):使用private关键字修饰。他是访问修饰符中级别最低的。私有成员只有类本身可以访问,不对外公开
ps:受保护和默认访问相似的,因为二者都授予可以访问同一包中的其他类。受保护访问类型实际上比默认访问的限制更小,因为受保护访问也授予访问在包外的子类
本类 同包 子类 外包
public √ √ √ √
private √ × × ×
protect √ √ √ ×
默认: √ √ √ ×
↓↓
默认的子类出了包就不能访问
封装
封装是使类中的成员变量都是private,并提供public方法访问这些成员变量的技术。如果一个成员变量被声明为private,那么它就不能被其他类访问,从而隐藏了类中的成员变量.因此,封装也被称为数据隐藏