16、子类和父类的赋值引用关系

2021-03-29  本文已影响0人  爱学习的代代

1、将子类的对象赋值给父类的引用✅。即:父类的引用可以指向子类的对象

2、将父类的对象直接赋值值给子类的引用 ❌,因为父类并没有子类的方法和属性。
不过如果可以确定了父类对象引用的类型,可以进行强制类型转换。

代码如下:

package day09;

public class TestPhoneV2 {
    public static void main(String[] args) {
        PhoneV2 v2 = new PhoneV2(200,"小米10",200,3999,3599,6,3.8,8.0,128.0,"小米","Android");
//
//        v2.buy(3);
//        v2.buy(100);
//        v2.describe();


//      将子类的对象赋值给父类的引用 ok
        MerchandiseWithConstructor m1 = v2;
        m1.describe();

//      将父类的对象直接赋值给子类的引用 ❌,不过如果确定父类引用的类型的话,可以直接直接进行强制类型转换。
        MerchandiseWithConstructor m2 = new MerchandiseWithConstructor();
//
        v2 = (PhoneV2) m1;
        v2.describe();


    }
}

3、当进行转换的时候,可以用instanceof 关键词看 对象A是否类B的一个实例,如果是返回true,如果是否的话,返回false

package day09;

public class TestPhoneV2 {
    public static void main(String[] args) {
        PhoneV2 v2 = new PhoneV2(200,"小米10",200,3999,3599,6,3.8,8.0,128.0,"小米","Android");
//
//        v2.buy(3);
//        v2.buy(100);
//        v2.describe();


//      将子类的对象赋值给父类的引用 ok
        MerchandiseWithConstructor m1 = v2;
        m1.describe();

//      将父类的对象直接赋值给子类的引用 ❌,不过如果确定父类引用的类型的话,可以直接直接进行强制类型转换。
        MerchandiseWithConstructor m2 = new MerchandiseWithConstructor();
//
        System.out.println("\n");

        if (m1 instanceof MerchandiseWithConstructor) {
            PhoneV2  v = (PhoneV2) m1;
            System.out.println("程序走到这里了....begin");
            v.describe();
            System.out.println("程序走到这里了....end");
        }

        System.out.println(m2 instanceof PhoneV2);
        
        System.out.println(null instanceof PhoneV2);

    }
}


执行结果:


image.png
上一篇下一篇

猜你喜欢

热点阅读