父类引用—>子类对象?不明白不懂得看过来

本文深入解析Java中的多态概念,通过实例说明父类引用指向子类对象时的行为变化,以及向上转型和向下转型的区别。并通过代码示例展示了如何在实际编程中应用这些概念。

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

父类引用指向子类对象,其实要从Java的多态说起了!那么,何为多态呢?

多态:

多态指的是同一个方法调用,由于对象不同可能会有不同的行为。
举个例子来说:
1.工作之余人都要休息,同样是调用人的“休息”方法,但不同的人有不同的休息方式。比如张三是睡觉,李四是旅游,王五是做数学题;
2. 同样是调用人“吃饭”的方法,中国人用筷子吃饭,英国人用刀叉吃饭,印度人用手吃饭。
现在差不多对多态有一点点了解了吧!

类型转换:

对象的类型转换分为:向上转型和向下转型
向上转型——父类引用指向子类对象,属于自动类型转换
如:Person person = new Student();
向下转型——需要强制类型转换
下面展示一些 代码片段

//定义一个动物类
public class Animal {
    public void shout() {
        System.out.println("叫了一声!");
    }
}

//定义一个狗类,继承自Animal
class Dog extends Animal {
    public void shout() {
        System.out.println("旺旺旺!");
    }
        public void seeDoor() {
            System.out.println("看门中....");
        }
}

//定义一个猫类,继承自Animal
class Cat extends Animal {
    public void shout() {
        System.out.println("喵喵喵喵!");
    }
}

测试类:

public class Test {
    public static void main(String[] args) {
        Animal a1 = new Cat(); // 向上可以自动转型
        // 传的具体是哪一个类就调用哪一个类的方法。大大提高了程序的可扩展性。
        animalCry(a1);

        Animal a2 = new Dog();
        animalCry(a2);//a2 为编译类型,Dog 对象才是运行时类型。

        /*编写程序时,如果想调用运行时类型的方法,只能进行强制类型转换。
        * 否则通不过编译器的检查。*/
        Dog dog = (Dog)a2;//向下需要强制类型转换
        dog.seeDoor();
    }
    static void animalCry(Animal a) {
        a.shout();
    }
}

运行结果如下图所示:
在这里插入图片描述
总之,父类引用子类的对象就是:编译看左边,运行看右边。
本文是根据作者本人学习和参考相关书籍编写,作者水平有限,如有错误,欢迎大家提出来;或者有不周到的地方,欢迎大家补充。

版权所有,转载请附上该文档链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值