这三个是面向对象的三个特性。主要目的就是为了对代码进行解耦重构。
一、封装
封装就是将数据和对数据的操作封装在一个类里面,从外部不可访问,只能通过给出的访问接口对数据进行处理。
二、继承
人有父子关系、母子关系,类也有!这么做的目的主要是为了让子类不那么的冗余,所有和父类有关系的都能进行继承访问。
// 继承的语法publicclassDeriveextendsBase{}Java语法只支持单继承,也就是说一个类最多只能有一个父类
1、构造函数
如果你构造一个子类对象,在子类对象初始化之前,父类对象要先进行初始化。
调用父类构造或者当前类的构造,构造函数必须放在第一句
publicclassDeriveextendsBase{intb;Derive(){//super()是在子类中调用父类的构造函数//如果一个父类只有默认构造函数,super()可写可不写//如果一个父类实现了有参构造,这个super()必须显示调用,传参super();b=1;}}2、this指针
- this主要指向的是调用对象。
- 主要区分和类成员属性名、方法名相同的变量名、方法名
this指针你可以理解为一个隐形的参数,传参在每个类方法的第一个参数位置上,指向调用的对象
publicclassBase{inta;// 在这里就是主要对参数a和类属性a进行区分publicBase(inta){this.a=a;}}3、super指针
这个指针和this指针差不多功能,但是主要是为了区分和父类成员属性名、方法名相同的变量名、方法名。
publicclassDerive{inta;// 在这里就是主要对参数a和类属性a进行区分publicDerive(inta){// 如果父类是有参构造,需要往super()里面进行传参super()this.a=a;}}4、final关键字
- final修饰变量x,x不能被修改。
- final修饰成员变量,成员变量必须被初始化。
- final修饰类,类不能被继承。
- final修饰类方法,方法不能被重写。
三、多态
多态就是同一种行为具有不同的表现形式。主要表现在猫狗都会叫,但是叫的行为不一样,一个“喵喵叫”,一个“汪汪叫”。多态 = 动态绑定 + 继承 + 重写
1、多态的构成条件
- 必须在继承关系体系下。
- 必须子类重写父类的方法。
- 必须通过父类引用调用重写方法。
[!NOTE] 注意!!!
- 子类方法的权限一定要大于等于父类方法的权限。
- 被private修饰的成员方法不能被重写。
- 被static修饰的成员方法不能被重写。
- 被final修饰的成员方法不能被重写。
publicclassAnimal{publicvoidbark(){System.out.println("Animal叫!!!");}}-------------------------------------------publicclassCatextendsAnimal{publicvoidbark(){System.out.println("Cat叫!!!");}}-------------------------------------------publicclassMain{publicstaticvoidmain(String[]args){Animalanimal1=newCat();animal1.bark();}}2、重载、重写
(1)重载
- 方法名相同
- 参数列表不同(参数的个数、顺序、类型)
- 返回值不做要求!!!
(2)重写 - 必须在继承体系下
- 子类重新定义父类的非静态、非final方法
- 返回值、方法名、参数列表均相同
3、向上 转型、向下转型
向上转型是将子类引用赋值给父类。
向下转型是将父类引用赋值给子类(父类引用必须是子类)。
向下转型关键字instanceof
publicclassMain{publicstaticvoidmain(String[]args){// 向上转型Animalanimal=newCat();// 向下转型if(animalinstanceofCat){Catcat=(Cat)animal;}}}