📅  最后修改于: 2020-03-22 14:25:19             🧑  作者: Mango
在继承中,子类获取超类属性。需要注意的重要一点是,当创建子类对象时,将不会创建超类对象的单独对象。仅创建具有超类变量的子类对象。
这种情况不同于通常的假设,即构造函数调用意味着将创建该类的对象,因此我们不能盲目地说,每当执行一个类构造函数时,是创建该类的对象。
// Java展示继承类的对象创建
// 父类
class Fruit
{
public Fruit()
{
System.out.println("父类构造函数");
System.out.println("父类对象的哈希码 :" +
this.hashCode());
System.out.println(this.getClass().getName());
}
}
// 子类
class Apple extends Fruit
{
public Apple()
{
System.out.println("子类构造函数");
System.out.println("子类对象的哈希码 :" +
this.hashCode());
System.out.println(this.hashCode() + " " +
super.hashCode());
System.out.println(this.getClass().getName() + " " +
super.getClass().getName());
}
}
// 测试代码
public class Test
{
public static void main(String[] args)
{
Apple myApple = new Apple();
}
}
输出:
父类构造函数
子类对象的哈希码 :366712642
Apple
子类构造函数
子类对象的哈希码 :366712642
366712642 366712642
Apple Apple
如我们所见,超类(水果)对象哈希码和子类(苹果)对象哈希码相同,因此仅创建了一个对象。该对象属于Apple(子类)类,因为当我们尝试打印创建该对象的类的名称时,它正在打印属于子类的Apple。