一.什么是多态?
多态就是一个事物的多种状态。
多态的规则
1.类与类之间必须有关系(继承关系)
2.必须要有方法的重写(没有重写没有意义)
3.核心:父类的引用(指针)指向子类的对象(空间)
二.多态如何调用成员变量
父类只能访问子类空间中属于父类的那块空间
编译:查看父类中是否有这个属性 没有就编译错误
运行:访问是父类中 这个成员变量
三.多态如何调用成员方法
编译:看父类中是否有该方法,没有就报错,有就编译通过
运行:调用子类重写父类的方法
对应代码
public class Demo02 {
public static void main(String[] args) {
//多态的创建形式
Father son = new Son();
son.print();
System.out.println(son.num);
Son son2 = new Son();
son2.print();
System.out.println(son2.num);
}
}
class Father{
int num = 10;
public void print() {
System.out.println("我是父类的打印方法");
}
}
class Son extends Father{
int num = 20;
public void print() {
System.out.println("我是子类的打印方法");
}
}
四.多态的优缺点
优点:1.减少代码量,提高工作效率,复用性强(其实就是改善了代码的可维护性)。2.(核心)提高方法的扩展性
弊端:当使用多态方式创建对象时,无法直接调用子类中特有的方法。
那么当使用多态方式创建对象时,如何调用子类中特有的方法呢?
在使用多态方式创建对象时,我们对子类对象进行了向上转型,如果我们想用调用子类中特有的方法,首先,使用强制类型转换,将其再向下转型(打回原形),然后就可以使用这个对象调用它特有的方法。
代码展示
public class Demo03 {
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("打人");
}
}