This question already has answers here:
What does it mean to “program to an interface”?
                            
                                (32个答案)
                            
                    
                    
                        What is polymorphism, what is it for, and how is it used?
                            
                                (28个答案)
                            
                    
                2年前关闭。
        

    

我是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)。而实例方法总是根据我们要引用的对象的类型来调用(在这种情况下,我们要引用test类Object)。

09-11 19:36
查看更多