java基础(多态2)

1.代码理解

class A 
{
}

class B extends A 
{
}

class Test
{
    public static void main(String[] args)
    {
        A a1 = new A();
        B b1 = new B();
        
        //b1 = a1;    //error,子类引用不能直接赋给父类引用
        b1 = (B)a1;  /*编译不会报错,运行会报错,说明语法没问题
                     但a引用实际上还是指向A类对象,这样赋值依旧会出问题*/       
    }
}

结果:Exception in thread "main" java.lang.ClassCastException: A cannot be cast to B

class A 
{
}

class B extends A 
{
}


class Test
{
    public static void main(String[] args)
    {
        A a1 = new A();
        B b1 = new B();
        
        a1 = b1;     //a1指向B类对象,或者A a1 = new B()
        b1 = (B)a1; //此时不会报错,因为a1指向的是B类的对象,(B)不可省略
    }
}

2.多态注意事项总结

  • 子类对象引用可以直接赋给父类引用,但父类引用不能直接赋给子类引用。
  • 通过父类引用只能访问从父类继承过来的成员,不能访问子类独有的成员。
  • 只有在父类引用本身指向子类对象时,才可以把父类引用强制转化为子类引用。其他情况下,把父类引用强制转化子类引用,运行时会报错。

你可能感兴趣的:(java基础(多态2))