SuperClass s=new SubClass(); 是什么意思?

What is the meaning of SuperClass s=new SubClass();?

Test.java

public class Test {

    public void go(){       
        System.out.println("Test go");
    }
}

Test2.java

public class Test2 extends Test {
public void go(){       
    System.out.println("Test 2 go");
}

public void back(){
    System.out.println("Test 2 back");
    }   
}

class Demo{

    public static void main(String[] args) {

    Test t=new Test2();
    t.go(); // Output : "Test 2 go"
    t.back(); //Compile time error. 
 }

 }

我在 Whosebug 上阅读了一些与此相关的问题,但我不理解 SuperClass s=new SubClass(); 的含义。 同样在输出中,如果测试对象可以访问 Test2 的 go() 方法,那么为什么它不能访问 back() 方法。

这是多态的一个例子,这意味着我们可以使用超类型的引用来引用子类型对象。

back() 方法没有为 Test 类型定义。您正在对无效的 Test 类型变量调用 back() 方法。 当你声明

Test t = new Test2();
  • 您正在创建类型为 Test
  • 的引用变量 t
  • 您指的是类型为 Test2 的对象,使用 多态引用。

Also in output if Object of Test can access the go() method of Test2 then why it cannot access back() method.

由于tTest类型,它只能知道Testclass中定义的方法。它无法知道 subclass Test2

中定义的方法

关于您在评论中提出的问题,

  • 当你说 t.go() 时,编译器正在考虑 go() 方法 Test class 正在呼叫。在编译时不知道哪个 将要创建对象。
  • 您的声明 Test t = new Test2(); 在运行时创建 Test2 对象,该对象又从 Test2 调用 go() 方法,因为它覆盖了 go() 12=]

你真的应该读一读 compile time polymorphism and runtime polymorphism