多态--多种形态
1.概念:父类引用指向子类对象。
注:
父类引用只能调用父类中所定义的属性和方法,子类独有的属性和方法不可调用。
二者必须存在继承关系
2.多态中的方法覆盖:
子类覆盖父类中的方法,使用父类引用调用该方法,执行的是覆盖之后的。
3.好处:
降低耦合性
屏蔽子类间的使用差异
4.向上转型、向下转型(掌握)
向上转型(装箱):父类引用中保存的是子类对象。
举例:Animal a = new Dog();
注意:父类引用只能调用父类中的属性和方法。
向下转型(拆箱):将父类引用中所保存的真实类型强制转换为自身类型。
举例:Dog d = (Dog)a;
注意:只有转换为子类真实类型,才可以调用子类中独有属性和方法。
封装
1.概念:属性私有化(private),提供setXXX和getXXX。
2.作用:保证数据的合理。
继承
1.概念:类与类之间,特征和行为的赠与或获得。
满足继承关系的前提:二者必须具备is a关系。
2.语法:class 子类 extends 父类{}
创建子类对象 = 父类共性 + 子类独有
3.继承的好处:减少代码的冗余,提高代码的复用性。
4.继承的特点:
java只支持单继承,不支持多继承,但可以多层继承,形成集成体系结构。
A 继承 B
A 继承 B 继承 C
A 继承 B A 继承 C
5.不可被继承
①构造方法
②private修饰的属性和方法
③父子类不在同一个package中,使用default修饰的属性和方法
三.访问修饰符
访问修饰符 本类 同包 非同包父子类 其他
private √
默认 √ √
protected √ √ √
public √ √ √ √
四.方法的覆盖
1.什么时候需要覆盖?
父类的方法无法满足子类的需求,需要覆盖。
2.覆盖的要求:
①返回值类型、方法名、形参列表和父类完全一致
②修饰符和父类相同或者比父类更宽
注:当子类覆盖父类方法后,调用该方法,执行的是覆盖之后的。
3.Overload和Override区别?
重载(Overload):一个类中定义多个相同名称的方法。
要求:
1.方法名相同
2.参数列表不同(类型、个数、顺序)
3.与访问修饰和返回值类型无关
覆盖(Override):父类方法无法满足子类需求,需要进行覆盖。
要求:
1.返回值类型、方法名、形参列表和父类完全一致
2.修饰符和父类相同或者比父类更宽
五.super(父类 基类 超类)
1.用法:
super.成员方法():表示调用父类中的成员方法
super.属性:表示调用父类的属性
super()和super(实参):表示调用父类的构造方法
注意:如果构造中没有this()或者this(实参)或者super(实参),每一个构造方法中首行都隐式存在super()。
在一个构造中this()或者this(实参)或者super()或者super(实参)因为都要求在首行,所以只能使用一个。
抽象类
抽象类作用:
1.为子类提供共性属性和方法。
2.可声明引用,强制使用多态。
抽象方法的作用:
1.强制子类覆盖,否则子类声明为抽象类。
总结:
1.抽象类不能创建对象,可以声明引用。
2.抽象类中不一定有抽象方法,而有抽象方法的类一定是抽象类。
3.继承下,子类必须覆盖父类中抽象方法,否则子类声明为抽象类。
4.抽象方法,只有方法声明,没有方法实现。
接口
与抽象类的异同:
相同:
都可生成对应的.class文件。
都不能创建对象。
可以声明引用。
都可以使用Object类中的方法。
不同:
接口只能定义公开静态常量,隐式存在public static final
接口只能定义公开抽象方法
没有构造方法、动态代码块、静态代码块
接口的概念
概念:接口是一种能力。
应用场景:父类提供的方法个数无法满足子类的需求,可通过实现接口的方式扩充子类能力。
注意:接口可以多实现。
接口的规范
实现接口,需要覆盖接口中的所有抽象方法,否则该类声明为抽象类。
覆盖时访问修饰符必须是public。
接口多态
概念:使用接口引用指向实现类对象。
注意:接口引用只能调用接口中所声明的方法,如果需要调用实现类中的方法,必须强转为实现类自身类型。
常见关系
类与类:单继承
extends 父类名称
类与接口:多实现
implements 接口1,接口2
接口与接口:多继承
extends 接口1,接口2,接口3