这个问题在这里已有答案:
我是Java初学者,我无法理解何时应该创建超类或子类的实例。我正在网上学习一些教程,我发现了几次类似下面的代码:
package test;
class ABC{
public void myMethod(){
System.out.println("Overridden Method");
}
}
public class test extends ABC{
@Override
public void myMethod(){
System.out.println("Overriding Method");
}
public static void main(String args[]){
ABC obj = new test();
obj.myMethod();
}
}
为什么我应该使用ABC obj = new test();
而不是test = new test();
?如果我需要一个新的ABC对象,那么只使用ABC obj = new ABC();
就没有意义吗?
谢谢你,对于noobie问题感到抱歉。
让我举个例子,比如你的父类ABC
有静态方法或实例变量
class ABC{
int a;
static void display(){
System.out.println("Parent ABC");
}
现在你有ABC abc = new test();
。通过引用abc
,您可以访问类public void myMethod()
的test
和类static void display()
的静态方法ABC
。此外,您可以使用类a
的实例变量ABC
与参考abc
。记住静态方法,实例变量,静态变量总是在引用类型上调用(在本例中类型为ABC
)。然而,总是在我们引用的Object类型上调用实例方法(在这种情况下,我们引用test
类Object)。
当一个类从另一个类扩展时,它将成为父类(扩展类)的子类。
父引用可以包含子项,而子引用可以始终保存它的实例。
test t = new test();
ABC abc = new test();
都是有效的。对于为什么这样的问题,克服某些情况可能会派上用场。
阅读有关面向对象编程中多态性概念的更多信息。