java多态理解

代码如下,猫狗继承自动物类,分别创建猫狗的实例,然后用猫狗的实例来创建一个lady的对象。创建lady对象有个疑问,lady的构造方法中,接收的是动物类型的变量,而创建lady对象传入的参数是动物类的子类对象,

  1. 这里为什么不需要强制类型转换呢?
  2. 据说这个就是多态的简单例子,求解一个比较通俗易懂讲解!谢谢!
public class TestPolymoph {
    public static void main(String args[]) {
        Dog g = new Dog("wangcai", "yellow");
        Cat c = new Cat("daju", "blue");
        Lady l1 = new Lady("Jecci", g);
        Lady l2 = new Lady("Tina", c);
        
        l1.animalEnjoy();
        l2.animalEnjoy();
    }
}

class Animal {
    private String name;
    
    Animal(String _name) {
        this.name = _name;
    }
    
    public void enjoy() {
        System.out.println("enjoy ...");
    }
}

class Cat extends Animal {
    private String eyesColor;
    
    Cat(String _name, String _eyesColor) {
        super(_name);
        this.eyesColor = _eyesColor;
    }
    
    public void enjoy () {
        System.out.println("miao miao ...");
    }
}

class Dog extends Animal {
    private String furColor;
    
    Dog(String _name, String _furColor) {
        super(_name);
        this.furColor = _furColor;
    }
    
    public void enjoy(){
        System.out.println("wang wang ...");
    }
}

class Lady {
    private String name;
    private Animal pet;
    
    Lady(String _name, Animal _pet) {
        this.name = _name;
        this.pet = _pet;
    }
    
    public void animalEnjoy() {
        pet.enjoy();
    }
}
阅读 1.5k
1 个回答

多态简单来讲就是子类实现可以代替父类/父接口。

你这么想,因为Cat继承Animal,Animal有的它都用,你可以把Cat当成Animal来用。这个是向上转型,父类在上,子类在下,这种转型是不需要强制类型转换的。因为子类确实有父类的所有功能。

当然在Lady类内部,你通过Animal类型只能使用Animal的属性和方法,如果要使用Cat的方法或属性,就必须强制类型转换了。这个是向下转型。向下转换必须要强制类型转换,变量当前是父类类型,没有子类特有的方法或属性,不能直接使用。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题