Java基础--面向对象高级(2)

什么是多态?

  • 把学生对象赋值给他的父类类型:
  • 多态的表现形式: 父类类型 对象名称 = 子类对象;
  • 多态的前提:
    • 有继承/实现关系
    • 有父类引用指向子类对象 :Person per = new Student();
    • 子类中需要对父类的方法进行重写 (可选);

多态的使用场景

  • 谁注册,就调用谁的show()方法 --- Admin注册就调用Admin的Show方法;
  • 只要Person为该注册用户的父类,那么他就都可以使用这个register()方法,解决了对象不同形参无法书写的问题;

多态调用成员的特点

  • 变量调用: 编译看左边,运行也看左边
  • 方法调用: 编译看左边,运行看右边

这样来理解:

scss 复制代码
        Fu f = new Zi();
        new Zi() : 这个世界上有一个儿子
        把子类的对象赋值给父类的类型:  儿子穿上了爸爸的衣服
        
        f.name: 在外人的眼中这个人仍是爸爸
        f.show(): 让这个人开始干活

例:通过例子来阐述多态成员的特点:

  • 父类如下:
js 复制代码
public class Fu {
    String name = "Fu";

    public void fuShow() {
        System.out.println("父类的fuShow被调用了");
    }

    public void show() {
        System.out.println("父类的show被调用了");
    }
}
  • 子类如下:
js 复制代码
public class Zi extends Fu {
    String name = "Zi";

    public void ziShow() {
        System.out.println("子类的ziShow被调用了");
    }

    @Override
    public void show() {
        System.out.println("子类的show被调用了");
    }

}
  • 测试类:
    • 展示1:
js 复制代码
Fu f = new Zi();
f.name = "Fu";
f.age = 18;//报错 因为没有父类age这个属性,编译看左边,根本过不了编译; 
  • -展示2:
js 复制代码
f.show();//子类的重写show被调用了

f.fuShow();//运行看右边 先去子类的方法里找show(),没有就去父类里面找 找到了输出父类的fuShow()

f.ziShow();//报错,编译看左边 父类没有这个方法,过不了编译
            这也是多态的一个弊端

多态的弊端

  • 多态下不能使用子类的独有方法;

类型转换

案例如下:

js 复制代码
Fu f = new Zi();
Zi zi = (Zi)f;
zi.ziShow()//可以调用,不会报错

注意点:

总结:

相关推荐
终将老去的穷苦程序员几秒前
基于SpringBoot的餐饮管理系统
java·spring boot·后端
张忠琳3 分钟前
【Go 1.26.4】Golang Map 深度解析
开发语言·后端·golang
一条泥憨鱼39 分钟前
Java开发效率神器:Lombok从入门到精通!
java·后端·学习·开发·lombok
熠熠仔41 分钟前
Spring Boot 与 MyBatis-Plus 空间几何数据集成指南
spring boot·后端·mybatis
AI 小老六1 小时前
Google AX 控制面拆解:分布式 Agent 如何把断点恢复、审计策略和执行调度收进同一条链路
人工智能·分布式·后端·ai·架构·ai编程
YHHLAI1 小时前
从零搭建一个 RESTful Todo 服务 —— Bun + TypeScript 全栈最小闭环
后端·typescript·restful
小闹5491 小时前
一个 65 行的小需求,我让 Claude Code 跑了 25 个 agent、整整两小时
后端·claude
天青色等烟雨..1 小时前
智慧农林核心遥感技术99个案例实践
运维·人工智能·spring boot·后端·自动化
西安邮电大学1 小时前
贪心算法详细讲解
java·后端·其他·算法·面试
橙序员小站1 小时前
从"夯"到"拉":谷歌苹果华为开发者大会,谁在裸泳?
人工智能·后端