多态
-
什么事多态:
同类型的对象表现出的不同的形态 -
多态的表现形式:
父类类型 对象名称=子类对象; -
满足多态的前提:
1.有继承或者实现的关系
2.有父类对象引用指向子类对象 (父类 变量名 = new 子类());
3.需要有方法重写
多态调用成员的特点:
- 变量调用:编译看左边 ,运行也看左边
- 方法调用: 编译看左边,运行看右边
变量调用:
编译看左边:java编译代码的时候会看左边的父类有没有这个变量,如果有的话,编译成功,如果没有则编译失败
运行也看左边:java运行代码的时候,实际是获取的是左边父类的成员变量的值
public class Main {public static void main(String[] args) {Animal test = new Dog();System.out.println(test.name);}
}class Animal {String name = "animal";
}class Dog extends Animal {String name = "dog";
}
输出结果:animal
如果父类中没有name 变量,代码会报错
方法调用:
编译看左:java在编译的时候会先看左边父类有没有这个方法,如果有,则编译成功,如果没有,则报错
运行看右:java运行代码的时候,实际上是调用右边子类里面的方法
public class Main {public static void main(String[] args) {Animal test = new Dog();test.eat();}
}class Animal {String name = "animal";public void eat() {System.out.println("animal eat");}
}class Dog extends Animal {String name = "dog";public void eat() {System.out.println("dog eat");}
}
输出结果:dog eat
总结
成员变量 在成员变量中,子类会把父类的成员变量继承下去
父类:name 子类:name
成员方法:如果子类对父类的方法进行了重写,那么在虚方法表里面,子类会把父类覆盖掉