多态中的上下转型

向上转型

  从子类到父类

   父类引用指向子类对象

向下转型

  从父类到子类

  父类引用转为子类对象

public class Animal {
    public void eat() {
        System.out.println("动物吃东西");
    }
}
public class Cat extends Animal{
    public void eat() {
        System.out.println("猫吃鱼");
    }
    public void playGame() {
        System.out.println("猫玩捉迷藏");
    }
}
public class AnimalDeom {
    public static void main(String[] args) {
        //上转型
        Animal a = new Cat();
        a.eat();
//        a.playGame(); 向上转型的父类对象中必须和子类有共同的方法
        Cat c = new Cat();
        c.playGame();

        //下转型
        Cat s = (Cat)a;
        s.playGame();
        s.eat();
    }
}

这几段代码不难理解,但需要着重注意上转型和下转型几个关键语句:

上转型:

Animal a = new Cat(); 
Animal 类的对象a,后面是开辟了一个空间Cat,从多态的概念上理解就是说,Cat有属于自己的属性和行为(Cat里面有两个行为(方法)),它可以用自己的类创建对象,这样所创建对象的属性和行为都是自己类里面的,
但是它也可以通过父类来创建对象,这里的Animal相当于动物类,就是Cat既有属于自己的属性,也有属于动物的属性,当它用动物类创建对象后,便失去了自己独有的属性,这也就是为什么编译不出a.playGame();

下转型:
 Cat s = (Cat)a;
左边是子类对象Cat,后面s相当于变量名,后面的相当于把父类对象给强制转换成子类对象。

上一篇:对象在内存中的存在形式


下一篇:linux记录