Java学习之细节二

目录

一、属性没有重写

例子

运行结果

 二、instanceof(比较操作符)

举例说明

知识点

三、总结


一、属性没有重写

属性的输出只看编译类型,不看运行类型

例子

package com.hspedu.poly_.detail_;

public class PolyDetail02 {
    public static void main(String[] args) {
        //向上转型,父类的对象引用指向子类对象
        Base01 base01 = new Sub();
      
        System.out.println(base01.count);

    }

}
class Base01 {
   int count = 10;
}
class Sub extends Base01 {
    int count = 20;
}

分析:虽然向上转型之后,父类的对象引用指向了子类对象,但是由于属性没有重写这个功能,所以属性的值只看编译类型(与方法不同),输出10

package com.hspedu.poly_.detail_;

public class PolyDetail02 {
    public static void main(String[] args) {
        //向上转型,父类的对象引用指向子类对象
        Base01 base01 = new Sub();
        System.out.println(base01.count);

       
        Sub sub = new Sub();
        System.out.println(sub.count);
    }

}
class Base01 {
   int count = 10;
}
class Sub extends Base01 {
    int count = 20;
}

分析: 编译类型是Sub,输出20

运行结果

 二、instanceof(比较操作符)

用于判断对象的运行类型是否为 XX 类型或 XX 类型的子类型,返回 boolean 的数据类型

举例说明

package com.hspedu.poly_.detail_;

public class PolyDetail03 {
    public static void main(String[] args) {
        //判断对象的运行类型是否为 XX 类型或 XX 类型的子类型
        BB bb = new BB();
        //bb的运行类型是BB,BB是BB类型
        System.out.println(bb instanceof BB);//true
        //BB是AA的子类,所以输出true
        System.out.println(bb instanceof AA);//true

        AA aa = new BB();
        //向上转型,aa的运行类型是BB,是AA的子类
        System.out.println(aa instanceof AA);//true
        System.out.println(aa instanceof BB);//true

        Object obj = new Object();
        //运行类型是Object,Object并不是AA的子类
        System.out.println(obj instanceof AA);//false

        String str = "hello";
        //str的运行类型是String,是Object的子类,true
        System.out.println(str instanceof Object);//true
        //String和AA没有任何关系,所以编译时就会报错
        //System.out.println(str instanceof AA);
    }

}
class AA {}
class BB extends AA{}

知识点

String是Object的子类

三、总结

只有在调用属性时是看编译类型,其余情况都是看运行类型


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值