多态成员属性心得

父类 子类成员变量关系:


若是子类的引用调用 父类有但是子类没有 成员变量时候

子类其实调用的是父类的成员变量, 但是也是属于子类的属性(特性),该属性受父类的变化影响


子类在new的时候产生了一个父类对象 在内存中,


class Animal {

protected String name= "mimi";

public  String getName() {return name;}

}


class Cat extends Animal{

String name;

Cat(String name) {

this.name = name;

}

}


public class Test3 {

public static void main(String[] args) {

Cat c1 =  new Cat("pipi");

System.out.println(c1.getName()); // 返回“mimi”

System.out.println(c1.name);     //  返回“pipi”

Animal c2 = (Animal)c1;

System.out.println(c2.name);     //  返回“mimi”

}

}


因为,有继承关系的两个类是这样的,最终new出来的子类的对象的内部会有一个父类对象,在这里也就是说,这Cat对象的内部包含有一个Animal对象,而且Cat类中并没有定义getName()方法,换句话说就是没有重写父类Animal的getName()方法,所以c1.getName(),表面上看,我们总是说此方法是继承下来的

,所以在Cat类中没有定义,但是可以使用,这只是表面上这么理解,实际上内存中是什么样?就是我上面说的那样,Cat对象的内部还有一个Animal对象,所以c1.getName()的时候,实际上是调用的它里面的那个父类Animal对象的getName()方法,而Animal类中定义的getName()是return name;注意,return的这个name指的是自己Animal的name,对吧,所以打印出mimi


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章