代码如下,猫狗继承自动物类,分别创建猫狗的实例,然后用猫狗的实例来创建一个lady的对象。创建lady对象有个疑问,lady的构造方法中,接收的是动物类型的变量,而创建lady对象传入的参数是动物类的子类对象,
- 这里为什么不需要强制类型转换呢?
- 据说这个就是多态的简单例子,求解一个比较通俗易懂讲解!谢谢!
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();
}
}
多态简单来讲就是子类实现可以代替父类/父接口。
你这么想,因为Cat继承Animal,Animal有的它都用,你可以把Cat当成Animal来用。这个是向上转型,父类在上,子类在下,这种转型是不需要强制类型转换的。因为子类确实有父类的所有功能。
当然在Lady类内部,你通过Animal类型只能使用Animal的属性和方法,如果要使用Cat的方法或属性,就必须强制类型转换了。这个是向下转型。向下转换必须要强制类型转换,变量当前是父类类型,没有子类特有的方法或属性,不能直接使用。