Java基础语法53-向下转型

Java基础语法53-向下转型

1.instanceof关键字使用

有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明为父类类型,导致编译时只能调用父类的属性和方法,而子类特有的属性和方法不能调用。

如何调用子类特有的属性和方法?

向下转型:强制类型转换

使用instanceof关键字避免转换时出现异常

package com.duotai;

public class PersonTest {
    public static void main(String[] args) {
        Person p = new Man();
        if(p instanceof Man){
            Man man = (Man)p;
            man.eat();
            man.earnMoney();
            man.walk();
            System.out.println("转换成功");
        }

    }
}
package com.duotai;

public class Person {
    String name;
    int age;

    public void eat() {
        System.out.println("人:吃饭");
    }

    public void walk(){
        System.out.println("人:走路");
    }
}
package com.duotai;

public class Man extends Person{
    boolean isSmoking;
    public void earnMoney(){
        System.out.println("男人负责挣钱养家");
    }

    @Override
    public void eat() {
        System.out.println("男人多吃肉,长肌肉");
    }

    @Override
    public void walk() {
        System.out.println("男人霸气的走路");
    }
}

2.向下转型的几个常见问题

问题1:编译时通过,运行时不通过

package com.duotai;

public class PersonTest {
    public static void main(String[] args) {
        //练习
        //问题1:编译时通过,运行时不通过
        Person p3 = new Woman();
        Man man = (Man)p3;
        

    }
}

这种情况要加instanceof去判断

问题2:编译时通过,运行时通过

package com.duotai;

public class PersonTest {
    public static void main(String[] args) {
        //练习
        //问题1:编译时通过,运行时不通过
        Person p3 = new Woman();
        Man man = (Man)p3;
        //问题2:编译时通过,运行时也通过
        Object object  = new Woman();
        Person p = (Person)object;

    }
}

问题3:编译时不通过

package com.duotai;

public class PersonTest {
    public static void main(String[] args) {
        //练习
        //问题1:编译时通过,运行时不通过
        Person p3 = new Woman();
        Man man = (Man)p3;
        //问题2:编译时通过,运行时也通过
        Object object  = new Woman();
        Person p = (Person)object;
        //问题3:编译时不通过,运行时不通过
        Man man = new Woman();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarxistVive

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值