java中的继承 - 我无法理解的东西

use*_*270 3 java

我对Java中的继承有疑问,我无法理解:

我有这两个班:

public class C
{
    public void foo(D d)
    {
         System.out.println("cd");  
    }
}

public class D extends C
{
    public void foo(C c)
    {
         System.out.println("dc");  
    }

    public void foo(D d)
    {
         System.out.println("dd");  
    }
}
Run Code Online (Sandbox Code Playgroud)

主要:

public static void main(String[] args)
{
    C cd = new D();
    D dd = (D)cd;   
}
Run Code Online (Sandbox Code Playgroud)

什么是每一个的类型cddd为什么?

Mar*_*nik 6

这里涉及两种不同的类型:

  1. 变量的类型;
  2. 变量引用的对象的类型.

变量的类型独立于它当前恰好引用的对象的类型 - 反之亦然,对象的类型不依赖于访问它的变量的类型.因此,当您将对象分配给另一个不同的另一个变量时,其类型不会受到影响.

所以,

  • 变量 的类型cdC;
  • 它所引用的对象的类型是D.