public class Person{
private String name;
public Person(String name){
this.name = name;
}
}
public class Employee extends Person{
public Employee(String name){
super(name);
}
}
public class EmployeeTest{
public static void main(String[] args){
Employee e = new Employee("briup");
}
}
在这里Employee类继承Person类,
在EmployeeTest类的main方法中,new一个Employee对象,
那么Employee类中构造器中的super(name)操作有没有创建Person对象,如果没有创建,那么在Person类中的
name变量在内存中以什么形式存放?
谢谢!
name 属性!是属于Person类!
在堆中Person区域的 分配的内存
你要记住 java是面向对象的语言。
java的创始者灵感来自于 现实生活。
你的那段程序代码,意思是 在构造子类前, 先把父类构造。然后再是子类。
因为先有老爸才有你。
同样的 java 语法规范里。 一个类只能继承一个父类。
同理 一个儿子的DNA不可能 来自于 2个不同的父亲。
你结合自然规律 去思考java的语法用以 规范就能很清除的理解深刻了
Employee 是Person的子类型,所以严格来讲,是创建了Person类型的对象了,并且可以安全上塑造型(Person)employee。
name是继承自Person的,就像楼上说的不能说父亲有了DNA,儿子就不需要有自己的DNA了,儿子也有,它不是父亲的,如果儿子已经出生了(父亲和儿子这俩对象已经创建了),他俩的值不能互相影响的,不能说改了父亲的DNA,已出生的儿子的DNA也改了。
但是是和父亲一类的,如果儿子还没出生时改变父亲的DNA(改变类的定义),等儿子出生的时候自然拥有新的一套DNA了。
关键是你要区分类、对象的区别,再有弄清楚继承的意思。