是这样的,我是一个初学者,我想请问一下:
我知道要形成多态,必须具备三个条件,
1、是有继承;2、是要重写;3、是要有父类引用指向子类对象;
我想请问一下,下面这段程序哪里体现了第3点,父类引用指向子类对象,不是类似
Animal a = new Cat();
除了这种写法还有别的属于父类引用指向子类对象吗?
class Animal{
private String name;
Animal(String name){
this.name = name;
}
public void enjoy(){
System.out.println("jiaosheng ...");
}
}

class Cat extends Animal{
private String eyescolor;
Cat(String n,String e){
super(n);
this.eyescolor = e;
}
public void enjoy(){
System.out.println("miao....");
}
}class Dog extends Animal{
private String height;
Dog(String n , String h){
super(n);
this.height = h;
}
public void enjoy(){
System.out.println("o..o..");
}
}

class Lady{
private String name;
private Animal Pet;

 Lady(String n, Animal P){
this.name = n;
this.Pet = P;
}

public void myPetEnjoy(){
Pet.enjoy();
}
}


public class Test{
public static void main(String [] args){
Cat c = new Cat("catname "," blue");
Dog d = new Dog("dogname "," 1m");
Lady l1 = new Lady("l1 ", c);
Lady l2 = new Lady("l2 ", d);
l1.myPetEnjoy();
l2.myPetEnjoy();
}
}输出:miao....
      o..o..

解决方案 »

  1.   

    Lady l1 = new Lady("l1 ", c); 
    Lady l2 = new Lady("l2 ", d); 
    这两行代码使用了多态,构造方法Lady()的第二个参数是Animal是Dog和Cat的父类,主方法中在构造时使用了多态!
      

  2.   

    多态是指父类的指针指向了一个子类的对象。
    如:Animall1=new Cat();
    在栈内存里边有一个Animal的指针
    堆内存里边有一个Cat的引用。Animal指针指向的是这个cat的对象。调用时就是调用cat的方法
    凡是:A a=new B();
    如果B是A的子类(A可以是接口也可以是类,B与A不相同),那么父类引用指向子类对象
      

  3.   

    在栈内存里边有一个Animal的指针 
    堆内存里边有一个Cat的引用。Animal指针指向的是这个cat的对象。调用时就是调用cat的方法 
      

  4.   

    Animal a = new Cat(); 这里的a,也就是我们常说的上转型对象....
      

  5.   

    多态是指父类的指针指向了一个子类的对象。 
    如:Animall1=new Cat(); 
    在栈内存里边有一个Animal的指针 
    堆内存里边有一个Cat的引用。Animal指针指向的是这个cat的对象。调用时就是调用cat的方法 
    凡是:A a=new B(); 
    如果B是A的子类(A可以是接口也可以是类,B与A不相同),那么父类引用指向子类对象