是这样的,我是一个初学者,我想请问一下:
我知道要形成多态,必须具备三个条件,
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、是有继承;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..
Lady l2 = new Lady("l2 ", d);
这两行代码使用了多态,构造方法Lady()的第二个参数是Animal是Dog和Cat的父类,主方法中在构造时使用了多态!
如:Animall1=new Cat();
在栈内存里边有一个Animal的指针
堆内存里边有一个Cat的引用。Animal指针指向的是这个cat的对象。调用时就是调用cat的方法
凡是:A a=new B();
如果B是A的子类(A可以是接口也可以是类,B与A不相同),那么父类引用指向子类对象
堆内存里边有一个Cat的引用。Animal指针指向的是这个cat的对象。调用时就是调用cat的方法
如:Animall1=new Cat();
在栈内存里边有一个Animal的指针
堆内存里边有一个Cat的引用。Animal指针指向的是这个cat的对象。调用时就是调用cat的方法
凡是:A a=new B();
如果B是A的子类(A可以是接口也可以是类,B与A不相同),那么父类引用指向子类对象