多态
多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。
1.多态的规则:
1.类与类之间 必须要有关系(继承关系)
2.必须要有方法的重写(多态没有意义)
3.(核心)父类的引用 指向 子类的对象(空间)
2.多态如何使用成员变量?
父类的引用只能访问子类空间中属于父类的那块空间
编译:编译时要查看父类中是否有这个属性,没有就编译错误
运行:运行时 要访问的是父类中的成员变量
结论:当使用多态形式创建对象的时候,访问成员变量的时候,编译和运行都是看父类中的属性
3.多态如何调用成员方法?
编译:编译时需要看父类中是否有该方法,没有就报错,有就编译通过
运行:运行时,调用的是子类重写父类的方法
结论:编译看父类,运行看子类
4.多态的好处:
1.提高了代码可维护性(指的是继承)
2.(核心)提高方法的扩展性
5.多态的弊端:
当使用多态的方式创建对象时,无法直接调用子类中特有的方法。
注意:多态调用子类的特有的方法时,必须要先有向上的转型,才能进行向下的转型
public class Demo {
public static void main(String[] args) {
// 多态创建对象
// 提升骗子的逼格
// 提升了子类对象的类型---向上转型
Person p = new PianZi();
p.speak();
// 如何调用子类特有的方法
// 把装成人的骗子打回原形---向下转型 --- 使用强制类型转换
PianZi pZ = (PianZi)p;
pZ.hit();
}
}
class Person{
public void speak() {
System.out.println("聊天");
}
}
class PianZi extends Person{
@Override
public void speak() {
System.out.println("洗脑"); // 方法重写
}
// 特有方法
public void hit() {
System.out.println("打人 威胁人"); //方法重写
}
}