问题描述
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
,在这种情况下创建的实例数都只是一个。每当您有疑问时,您应该考虑是否可以实例化 interface
或 abstract class
并且您会得到 NO 作为答案。因此,创建的实例数量将与您使用具体类创建的数量相同,在本例中为 Dog
。
回答你的最后一个问题:我们称之为多态
如果您对它们具有相同的属性,它将使用属于 Dog 类的属性