开发者社区> 问答> 正文

关于JVM中继承关系的实体是如何存储的,求大神详细指点?

//生物
class Creator {

private int age;
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}
public Creator() {
    age = 1;
    System.out.println("this is Creator's constructor");
}

}

//动物类
class Animal extends Creator {

private String name;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public Animal() {
    name="Animal";
    System.out.println("this is Animal's constructor");
}

}

//狗
class Dog extends Animal {

private String hostName;
public String getHostName() {
    return hostName;
}
public void setHostName(String hostName) {
    this.hostName = hostName;
}
public Dog() {
    hostName="Dog";
    System.out.println("this is Dog's constructor");
}

}
public class Demo{

public static void main(String[] args) {
    Creator c = new Dog();
    Animal a = (Animal)c; 
    Dog d = (Dog)c;
    System.out.println(" age:" + c.getAge()+",name:" + 
    a.getName()+",HostName:" + d.getHostName());
}

}
控制台打印
this is Creator's constructor
this is Animal's constructor
this is Dog's constructor
age:1,name:Animal,HostName:Dog
其实在Creator c = new Dog();执行的时候就会把Animal和Dog信息存储在Creator中只是类型不一致无法获取,它们在JVM是如何执行的?这样设计是否合理,会不会造成空间浪费?

展开
收起
华拓 2017-07-28 01:41:18 2531 0
1 条回答
写回答
取消 提交回答
  • 当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了。示例代码其实是使用Creator类型的引用,指向的是Dog对象。在Java中我们可以通过继承、向上转型的关系使用父类类型来引用它,这个时候我们是使用功能较弱的类型引用功能较强的对象,这是可行的。

    2019-07-17 21:26:35
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
JVM实战 立即下载
JVM的GC 立即下载
基于JVM的脚本语言开发、运用实践 立即下载