多态

来源:互联网 发布:手机uu加速器网络异常 编辑:程序博客网 时间:2024/05/18 00:03

多态:子类的对象可以代替父类的对象使用

   在多态情况下, 一个引用类型的变量如果声明为父类的类型, 但实际引用的是子类对象,则该变量就不能访问子类中添加的属性和方法。

可是如果此时调用的是父类中声明过,且在子类中又重写过的方法,情况又将如何?

 

1.创建Animal父类

public class Animal {//成员属性public String name;//构造器public Animal() {System.out.println("---------animal构造器--------");}//成员方法public void fly(){System.out.println("---animal----fly---");}}

2.创建Bird子类

public class Bird extends Animal{public String sex;public Bird() {System.out.println("----Bird构造器----------");}@Overridepublic void fly() {//super.fly();System.out.println("----Bird----fly---");}public void fly(float speed){}}

3.创建测试类

public class TestDemo {public static void main(String[] args) {// 在实例化子类的对象时,必须先实例化祖先/* * Bird b = new Bird(); *  * b.fly();//调用的是Bird的方法 *//* * Animal animal = new Animal(); *  * animal.fly();//调用的是Animal的方法 */// 调用子类中的重写方法/* * Bird bird = new Bird(); *  * if(bird instanceof Animal){ Animal animal = bird; animal.fly();} */// 父类的对象不能当作是一个子类的对象来使用/* * Animal animal = new Animal();* Bird bird = (Bird) animal; */// 从父类到子类// bird.fly();// 声明的是一个Animal对象,但是实际引用的是Bird的对象Animal animal = new Bird();// 把animal对象转换成 Bird对象的时候,需要强制造型的.Bird bird = (Bird) animal;bird.fly();}}



0 0