学【Java多态】-- 写高质量代码

简介: 学【Java多态】-- 写高质量代码

多态的实现条件

在java中要实现,必须要满足如下几个条件,缺一不可。

  • 1.必须在继承体系下
  • 2.子类必须要对父类中的方法进行重写
  • 3.通过父类的引用调用冲写的方法。

想要真正的学好多态需要去学习一些前置知识,那我们直接开始吧!

重写

重写:也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写,返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

【重写的规则】

  • 子类在重写父类的方法时,返回值,方法名,参数列表,要保持完全一致。
  • 访问权限不能比父类中被重写的方法的访问权限更低。
  • 父类被static、private修饰的方法、构造方法都不能被重写。
  • 重写方法可以使用,@Override 注解来显式指定,相当于多一层编译器校验。

【重写和重载的区别】

动态绑定与静态绑定

静态绑定:也称为前期绑定(早绑定),即在编译时,根据用户所传递实参类型就确定了具体调用那个方法。典型代表函数重载。

动态绑定:也称为后期绑定(晚绑定),即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体调用那个类的方法

向上转型

向上转型简单来说就是把子类对象给父类。

实际就是创建一个子类对象,将其当成父类对象来使用

语法格式

这两行代码可以简化成一行代码。

Animal animal = new Dog("旺财",3);  //父类引用,引用了子类对象

你看到的这个过程就是向上转型。

向上转型的优点:让代码实现更简单灵活。
向上转型的缺陷:不能调用到子类特有的方法。

向下转型

将一个对象进行向上转型之后当成父类对象使用,在无法调用子类特有的方法,此时:将父类引用在还原为子类对象即可。

语法格式:

向下转型用的比较少,而且不安全,万一转换失败,运行时就会抛异常。

多态

多态的概念

多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同 的状态。

  • 多态是方法或对象具有多种形态,是面向对象的第三大特征
  • 多态前提是两个对象(类)存在继承关系,多态是建立在封装和继承基础之上的

总的来说:同一件事情,发生在不同对象身上,就会产生不同结果。

多态的应用

说明:如果我们想画一些图形出来,有花,圆形,三角形。

class Shape{
    public void draw(){
        System.out.println("画图形");
    }
}
class Rect extends Shape{
    @Override
    public void draw() {
        System.out.println("♦");
    }
}
class Cycle extends Shape{
    @Override
    public void draw() {
        System.out.println("⚪");
    }
}
class Flower extends Shape{
    @Override
    public void draw() {
        System.out.println("❀");
    }
}
public class Test {
    public static void main(String[] args) {
        Shape[]shapes = {new Rect(),new Cycle(),new Flower()};
        for(Shape shape : shapes){
            shape.draw();
        }
    }
}
目录
相关文章
|
3天前
|
Java 索引
Java实现扑克牌游戏 | 随机发牌 ( 过程拆分详解+完整代码 )
Java实现扑克牌游戏 | 随机发牌 ( 过程拆分详解+完整代码 )
|
21小时前
|
缓存 算法 安全
如何优化Java代码性能
如何优化Java代码性能
|
1天前
|
Java 数据安全/隐私保护
Java中的类继承与多态详解
Java中的类继承与多态详解
|
3天前
|
Java
Java面向对象 ( 多态 | final关键字 | 接口 )
Java面向对象 ( 多态 | final关键字 | 接口 )
|
1天前
|
设计模式 IDE Java
提高Java代码的可读性的技巧
提高Java代码的可读性的技巧
|
2天前
|
Java 测试技术 开发者
Java中设计可测试的代码的最佳实践
Java中设计可测试的代码的最佳实践
|
3天前
|
Java jenkins 持续交付
Jenkins是开源CI/CD工具,用于自动化Java项目构建、测试和部署。通过配置源码管理、构建触发器、执行Maven目标,实现代码提交即触发构建和测试
【7月更文挑战第1天】Jenkins是开源CI/CD工具,用于自动化Java项目构建、测试和部署。通过配置源码管理、构建触发器、执行Maven目标,实现代码提交即触发构建和测试。成功后,Jenkins执行部署任务,发布到服务器或云环境。使用Jenkins能提升效率,保证软件质量,加速上线,并需维护其稳定运行。
16 0
|
3天前
|
存储 安全 Java
JAVA反射技术:让你像“黑客”一样操控代码
【7月更文挑战第1天】JAVA反射技术让开发者能动态操控代码,如在运行时检查类、接口、字段和方法,以及动态创建对象。在一个企业级应用案例中,通过反射,实现了动态加载和卸载请求处理模块,避免了传统方式下需重启应用的不便。`ReflectionBasedDispatcher`类使用反射注册并管理`RequestHandler`实现类,提高了代码灵活性和应对变化的能力,展现了反射技术的强大和实用性。
|
3天前
|
安全 Java 数据安全/隐私保护
JAVA反射:你的代码“活”了吗?
【7月更文挑战第1天】Java反射是运行时动态代码操作,允许访问和修改类、属性及方法。它提供动态加载类、按需调用方法、修改私有属性及创建泛型实例的能力。使用反射需注意性能损耗、安全风险和代码可读性降低。示例展示了通过`Class.forName()`加载类,`getDeclaredConstructor().newInstance()`创建对象,`getMethod().invoke()`调用方法的过程。在性能敏感和安全关键的项目中使用时需谨慎。
|
3天前
|
存储 SQL 安全
提升Java代码安全性的建议
提升Java代码安全性的建议