Java 虚拟机创建了多少个对象?

问题描述

Java 中的所有类认扩展 Object

public class Dog{
    public Dog()
}
public static void main(String args[]){
    Dog dog = new Dog();
}

如果我编译此代码,JVM 将在堆 1-对象 2-Dog 上创建 2 个类。如果 Dog 类实现了一个接口并扩展了一个抽象类,会发生什么?

public interface Animal{
}
public abstract class Mammal{
}

在这种情况下,Dog 将实现 Animal 接口并扩展 Mammal 抽象类:

public class Dog extends Mammal implements Animal{
    public Dog();
}

当我现在像以前一样创建 Dog 对象时,JVM 将在堆上创建多少个对象?

public static void main(String args[]){
    Animal Dog = new Dog();
}

如果我用 Animal 类型创建 Dog,会发生什么变化?

解决方法

您仍然只有一个 Dog 实例,无论它实现的接口或扩展的类如何。

,

无论您的类实现了多少个 interface,在这种情况下创建的实例数都只是一个。每当您有疑问时,您应该考虑是否可以实例化 interfaceabstract class 并且您会得到 NO 作为答案。因此,创建的实例数量将与您使用具体类创建的数量相同,在本例中为 Dog

,

回答你的最后一个问题:我们称之为多态

如果您对它们具有相同的属性,它将使用属于 Dog 类的属性