目录
多态
指同一种事物表现出的多种形态。
多态使用前提
1.子类必须继承父类
2.子类要有方法重写
3.父类引用指向子类对象
格式:
子类 zi = new 子类()
父类 fu = new 子类()——向上转型
多态成员访问特点
1.访问成员变量
例
父类 fu = new 子类()
fu.name
访问的是父类的name(编译看左边,运行看左边)
2.访问成员方法
例
父类 fu = new 子类()
fu.show()
首先看父类中是否有show方法
若有,再看是否被子类重写
若被重写,则访问的是子类重写的show方法,反之,访问父类的show方法(编译看左边,运行看右边)
3.构造方法
创建子类对象时,先访问父类的构造方法。
4.静态方法
访问的是父类的(编译看左边,运行看右边)
多态的好处
1.提高了代码的维护性(继承)
2.提高了代码的扩展性(多态)
程序设计原则:开闭原则——对扩展开发,关闭修改。即不能在一个类中多次修改增加功能。
多态的弊端
无法访问子类特有的功能,必须向下转型
例
Animial为父类,Cat为子类
Animal an = new Cat() //向上转型(多态)
Cat cat = (Cat) an //向下转型 ,即可访问子类的个性的成员变量和方法
抽象类
一个方法没有方法体称为抽象方法。 public abstract void xxx();
类中若有抽象方法,必须定义为抽象类。
抽象类特点
1.abstract关键字修饰
2.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
3.不能直接创建对象,可用多态的方式创建
父类 fu = new 子类()
4.抽象类的子类,可以是抽象子类,也可以不是抽象的,但要重写抽象类中的所有方法
5.抽象类可以有构造方法
注意事项
1. private abstract 矛盾,因为抽象强制重写,而private 子类无法继承重写。
2. public abstract final 矛盾, 因为抽象强制重写, 而final 不能重写
3. public abstract static 矛盾, 因为静态方法不算重写,子类没有办法重写静态方法。