【发布时间】:2015-03-11 16:23:22
【问题描述】:
简而言之,如何以及为什么会这样:
Object obj=new MyClass();
Object 是所有对象的超类,因此 MyClass 是 Object 的子类。一般来说,在Java中,为什么可以在父类中使用子类的构造函数?
我理解它是如何反过来的,因为子类拥有父类的所有变量/方法,所以当你初始化它们时,你只是初始化父构造函数中指定的变量,这些变量按定义存在于孩子。问题是,当你反其道而行之时,它不一定是正确的。 子级可以有父级没有的变量,那么当父级甚至没有变量时,如何将子级构造函数与父级一起使用?
这个特性在开发中有什么用处?我认为如果你想要一个 B 类的实例,你应该将它声明为 B thing=new B(),而不是 A thing=新的 B()。这可能是我的经验不足,所以我希望能得到关于为什么以及如何将父类初始化为其子类的启发。
【问题讨论】:
-
要获得准确的答案,您必须深入了解 Java 是如何实现的......为了让您直观了解
Object obj = new MyClass();为何有效,那是因为MyClass是一个Object,因为它实现了那个类并且拥有它的所有方法/属性/等等。但是,Object没有实现方法/等。MyClass -
您没有在“父类”中使用子类的构造函数:您正在使用子类的构造函数,但随后将“MyClass”对象分配给更通用的类变量,一个“对象”。
-
What uses does this feature have in development?如果类型无关紧要并且我们正在处理许多可能的类型。为每种可能的类型编写一个方法可能是不可能的。但是如果我们只需要具体的信息,比如Object#toString()方法,那么我们可以只使用Object而不是MyClass和String和Integer等等。例如,System.out.println(Object);
标签: java oop inheritance