对象的多态

文章通过Java代码展示了向上转型和向下转型的概念。向上转型是将子类对象赋值给父类引用,允许调用父类的公共方法,但不能访问子类特有的成员。向下转型则是将父类引用转换为子类类型,以便调用子类特有的方法和属性。文章还提到了instanceOf操作符用于判断对象的实际类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

向上转型和向下转型

public class Application {
    public static void main(String[] args) {

        //向上转型:父类的引用指向子类的对象
        //语法:父类类型引用名=new 子类类型();
        //编译类型看等号左边,运行类型看等号右边
        Animal animal = new Cat();

        //可以调用父类的所有成员(需要蹲守方法权限)
        //但是不能调用子类的特有的成员
        //因为在编译阶段,能调用哪些成员,由编译类型决定
        //animal.catchMouse(); 错误
        //最终运行结果看子类(运行类型)的具体实现,即调用方法时按照从子类(运行类型)中查找方法,子类中没有再从父类中查找方法
        animal.eat();
        animal.run();
        animal.show();
        animal.sleep();

        //向下转型
        //语法:子类类型  引用名=(子类类型) 父类引用
        //要求父类的引用必须指向的是当前目标类型的对象
        //可以调用子类类型中所有的成员
        Cat cat = (Cat) animal; //编译类型和运行类型都是Cat
        cat.catchMouse();
    }
}
public class Animal {
    String name="动物";
    int age=10;

    public void sleep()
    {
        System.out.println("睡");
    }

    public void run()
    {
        System.out.println("跑");
    }

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

    public void show()
    {
        System.out.println("hello");
    }
}
public class Cat extends Animal{

    public void eat()//方法重写
    {
        System.out.println("猫吃鱼");
    }

    public void catchMouse()
    {
        System.out.println("猫抓老鼠");
    }
}

属性没有重写之说,属性的值看编译类型

public class test {
    public static void main(String[] args) {
            Base base = new Sub(); //向上转型
            Sub sub = new Sub();
        System.out.println(base.count); //看编译类型 10
        System.out.println(sub.count); //20
    }
}

class Base { //父类
    int count = 10; //属性
}

class Sub extends Base { //子类
    int count = 20; //属性
}

instanceOf 比较操作符,用于判断对象的运行类型是否为XX类型或XX类型的子类型

 //aa编译类型是Animal,运行类型是Cat
        Animal aa = new Cat();
        System.out.println(aa instanceof Animal); //true
        System.out.println(aa instanceof Cat); //true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值