多态

本文深入探讨了Java中的多态性概念,包括如何通过父类引用指向子类对象实现多态,以及方法的重写和隐藏。强调了多态是方法的多态而非属性的,并指出在使用多态时需要注意类型转换可能引发的ClassCastException。同时,通过实例展示了如何在子类中重写父类方法并进行调用。总结了多态存在的条件以及注意事项,例如需要继承关系、方法重写等。
摘要由CSDN通过智能技术生成

多态

我们新建三个类 Application Person Student

Student 继承 Person

在这里插入图片描述

我们new Person 他就是Person new Student 他就是Student

一个对象的实际类型是确定的

但是他可以指向的引用类型就不确定了

Student s1 = new Student();
Person s2 = new Student(); //父类的引用指向子类的类型
Object s3 = new Student(); //父类的引用指向子类的类型     Object是所有类的祖类

一个类型的实际对象是确定的,但是可以指向对象的这个引用类型却是可以是任意的

我们在Person类中写有一个方法

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

在这里插入图片描述

我们输出一下

在这里插入图片描述

就会发现成功运行

我们虽然Person s2 = new Student(); new的是Student 但是他依旧走了父类的方法

因为子类继承父类的全部方法

这时候我们在子类里面重写一下父类的方法

在这里插入图片描述

运行一下

在这里插入图片描述

就会发现2个都走了son

是因为子类重写了父类的方法,执行子类的方法

我们在子类里面输入一个eat方法

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

那么在Application类里面

s1.eat();

可以调用eat方法

那么s2可以吗?

我们输入s2.eat

发现

IDEA软件自动跟我们生成了这样

((Stdent)s2).eat();

我们直接输入s2.eat 会报错

在这里插入图片描述

是因为Person类里面没有eat这个方法

如果有,那么将调用Person类里面的eat

如果子类重写了eat 那么将调用子类里面的eat

 //可以指向的引用类型就不确定了 :父类引用指向子类
        //Student 能调用的方法都是自己的或者是继承父类的
        Student s1 = new Student();
        //Person 父类型 可以指向子类,但是不能调用子类独有的方法
        Person s2 = new Student();
        //父类的引用指向子类
        Object s3 = new Student();
((Stdent)s2).eat();    //是将Person类的s2 强制转换为Student类型的s2    高转低   强制转换

多态注意事项

  1. 多态是方法的多态,属性没有多态。

  2. 父类和子类 有联系 类型转换异常 (有些类型无法转换,但是强制转换的话会出错) ClassCastException!

  3. 存在的条件: 继承关系,方法需要重写,父类引用指向子类对象 father f1 = new son();

    有些方法无法被重写

    • static 静态方法 属于类 它不属于实例
    • final 常量
    • private 私有的 无法被重写

多态

  • 即同一方法可以根据发送对象的不同而采用多种不同的行为方式

    比如说同样都是run方法 通过s1 和s2 调用出来的,可能会产生不同的结果,但也有可能子类重写了父类,都是通过s1 和s2 调用出来的,但方法都走的子类的

  • 一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)

多态是方法的多态,属性没有多态性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值