继承:instanceof运算符令人困惑

Bre*_*min 1 java polymorphism inheritance instanceof

考虑以下代码:

class B
{
  int j =100;
}

class A extends B
{
    int i=10;
}

public class Test
{
    public static void main(String[] args)
    {
       A obj =new A();
       System.out.println(obj);
       B obj1 =obj;

       System.out.println(obj1); // here i am confused

       if( obj1 instanceof A )
       {
                System.out.println("yes"); //here i am confused
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的输出是:

A@35186a
A@35186a
yes
Run Code Online (Sandbox Code Playgroud)

现在obj1是B类的一个超类的实例,为什么将toString()它显示为A的对象呢?另外,instanceof运算符如何将它显示为A类的实例?

Kep*_*pil 5

您必须区分引用和实际对象.

B obj1 = obj;
Run Code Online (Sandbox Code Playgroud)

在这里,您可以创建一个名为的新引用类型.引用的对象仍然是一个对象,但永远不能更改.Bobj1A