【Java】多态1

简介: 【Java】多态

1.多态的概念

1.1 多态的基本概念

多态:见名知意,就可以知道是多种状态、多种形态。也就是去完成某个行为的时候,当不同的对象去完成就会产生不同的状态


比如:打印机可以分为彩色打印机和黑白打印机,我们知道 Java 是面向对象思想的语言,面向对象的程序设计中一切皆为对象。那么彩色打印机是一个对象,黑白打印机又是一个对象,它们都属于打印机,所以打印机是它们的父类,它们是打印机的子类。它们同样是打印但是当用彩色打印机打印出来的一定是彩色的,当用黑白打印机打印出来的就是黑白色的,所以这就体现了当用不同的对象去完成同一个行为时会产生不同的状态

去.png



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


1.2 多态实现的条件

如果想要实现多态必须满足以下条件:


必须在继承体系下

子类必须对父类的方法进行重写

通过父类的引用调用子类重写的方法

多态的体现:在代码运行时,当传递不同的类对象时,会调用对应类中的重写方法


class Printer {
    public String name;
    Printer(String name) {
        this.name = name;
    }
    public void print() {
        System.out.println(name+"打印");
    }
}
class ColorPrinter extends Printer {
    ColorPrinter(String name) {
        super(name);
    }
    public void print() {
        System.out.println(name+"打印彩色的");
    }
}
class BWPrinter extends Printer {
    BWPrinter(String name) {
        super(name);
    }
    public void print() {
        System.out.println(name+"打印黑白的");
    }
}
public class Test {
    public static void main(String[] args) {
        ColorPrinter colorPrinter = new ColorPrinter("彩色");
        Printer printer = colorPrinter;
        printer.print();
    }
}

Printer:打印机        ColorPrinter:彩色打印机        BWPrinter:黑白打印机


要实现多态第一步就是必须在继承体系下,彩色打印机和黑白打印机都是打印机的子类,也就说明它们是继承关系。第二步就是子类必须对父类的方法进行重写,父类里面写了一个print方法,两个子类里面也写了print方法,这些print方法结构都一样只是方法体的里面的实现不一样,说明它们的确是重写了父类的方法。第三步通过父类的引用调用子类重写的方法,我们实例化一个子类对象,然后将子类对象赋值给一个父类类型,然后通过父类的引用调用该子类的方法


2.重写

上述我们说了想要实现多态,子类必须对父类的方法进行重写。那我们接下来就一起学习重写


2.1 重写的概念

重写:也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, 返回值和形参还有方法名都不能改变(即外壳不变,核心重写)。


重写的好处: 子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法。


2.2 方法重写的规则

子类在重写父类的方法时,一般必须与父类方法原型一致: 返回值类型 方法名 (参数列表) 要完全一致

被重写的方法返回值类型可以不同,但是必须是具有父子关系的

访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方法就不能声明为 protected

父类被static、private修饰的方法、构造方法都不能被重写

重写的方法,可以使用 @Override 注解来显式指定。有了这个注解能帮我们进行一些合法性校验。例如不小心将方法名字拼写错了 (比如写成 aet),那么此时编译器就会发现父类中没有 aet 方法,就会编译报错,提示无法成重写

2.3 重写和重载的区别

请.png

①重写



class Printer {
public String name;
    Printer(String name) {
        this.name = name;
    }
    public void print() {
        System.out.println(name+"打印");
    }
}
class ColorPrinter extends Printer {
    ColorPrinter(String name) {
        super(name);
    }
    @Override
    public void print() {
        System.out.println(name+"打印彩色的");
    }
}

上述代码 子类ColorPrinter 中的 print方法 就是对 父类Printer 里面的 print方法 进行了重写


重写:返回类型相同,方法名相同,形参列表一致


注:返回值还可以是父子关系


②重载


class Printer {
    public String name;
    Printer(String name) {
        this.name = name;
    }
    public void print() {
        System.out.println(name+"打印");
    }
    public void print(int year) {
        System.out.println(name+year+"打印彩色的");
    }
}

此时 Printer类 里面的两个 print方法 进行了重载


重载:返回类型随便,方法名相同,参数列表一定不同


注:参数列表不同可以是形参顺序不同,形参类型不同...


方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现


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

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


相关文章
|
5月前
|
算法 Java 程序员
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
83 9
|
5月前
|
Java 开发者
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
45 7
|
5月前
|
Java 开发者
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
53 5
|
5月前
|
Java 程序员
让我们一起探讨Java多态的奥秘,看看它是如何打破“一刀切”的局限,让我们的代码更加生动多彩
让我们一起探讨Java多态的奥秘,看看它是如何打破“一刀切”的局限,让我们的代码更加生动多彩
46 5
|
5月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
3月前
|
存储 Java 测试技术
Java零基础-多态详解
【10月更文挑战第10天】Java零基础教学篇,手把手实践教学!
41 4
|
3月前
|
Java 编译器 程序员
Java多态背后的秘密:动态绑定如何工作?
本文介绍了Java中多态的实现原理,通过动态绑定和虚拟方法表,使得父类引用可以调用子类的方法,增强了代码的灵活性和可维护性。文中通过具体示例详细解析了多态的工作机制。
80 4
|
4月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
3月前
|
Java
java继承和多态详解
java继承和多态详解
55 5
|
4月前
|
Java 编译器
Java——类与对象(继承和多态)
本文介绍了面向对象编程中的继承概念,包括如何避免重复代码、构造方法的调用规则、成员变量的访问以及权限修饰符的使用。文中详细解释了继承与组合的区别,并探讨了多态的概念,包括向上转型、向下转型和方法的重写。此外,还讨论了静态绑定和动态绑定的区别,以及多态带来的优势和弊端。
93 9
Java——类与对象(继承和多态)