美文网首页Java进阶之路饥人谷技术博客Java
java没有那么难,跟着我一起看看java 多态

java没有那么难,跟着我一起看看java 多态

作者: java搬砖从来不加班 | 来源:发表于2021-08-12 17:06 被阅读0次

java 多态

多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作。
多态性是对象多种表现形式的体现。

现实中,比如我们按下 F1 键这个动作:

  • 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
  • 如果当前在 Word 下弹出的就是 Word 帮助;
  • 在 Windows 下弹出的就是 Windows 帮助和支持。
    同一个事件发生在不同的对象上会产生不同的结果。

多态的优点

  • 消除类型之间的耦合关系
  • 可替换性
  • 可扩充性
  • 接口性
  • 灵活性
  • 简化性

多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象

多态的实现方式

方式一:重写:

  • 这个内容已经在上一章节详细讲过,就不再阐述,详细可访问:Java 重写(Override)与重载(Overload)。

方式二:接口

  • 生活中的接口最具代表性的就是插座,例如一个三接头的插头都能接在三孔插座中,因为这个是每个国家都有各自规定的接口规则,有可能到国外就不行,那是因为国外自己定义的接口类型。

  • java中的接口类似于生活中的接口,就是一些方法特征的集合,但没有方法的实现。

方式三:抽象类和抽象方法

/**
 * obj-2
 * 多态
 */
abstract class Fruits {
    abstract void colour();
}
/**
 * obj-2
 */
public class Apple extends Fruits {
    public void colour(){
        System.out.println("红色");
    }
 
    public void price(){
        System.out.println("1.5");
    }
}
/**
 * obj-2
 */
public class Banana extends Fruits {
    public void colour(){
        System.out.println("黄色");
    }
 
    public void price(){
        System.out.println("2.0");
    }
}

public class Obj_2 {
 
    public static void main(String[] args) {
        show(new Apple());
        show(new Banana());
 
        Fruits f = new Apple();// 向上转型
        f.colour();// 调用的是 Apple 的 colour
        Apple a = (Apple)f;// 向下转型
        a.price();// 调用的是 Apple 的 price
    }
 
    public static void show(Fruits f){
        f.colour();
        if(f instanceof Apple){
            Apple a = (Apple)f;
            a.price();
        }else if(f instanceof Banana){
            Banana b = (Banana)f;
            b.price();
        }
    }
}

虚函数

虚函数的存在是为了多态。
Java 中其实没有虚函数的概念,它的普通函数就相当于 C++ 的虚函数,动态绑定是Java的默认行为。如果 Java 中不希望某个函数具有虚函数特性,可以加上 final 关键字变成非虚函数。

重写

我们将介绍在 Java 中,当设计类时,被重写的方法的行为怎样影响多态性。
我们已经讨论了方法的重写,也就是子类能够重写父类的方法。
当子类对象调用重写的方法时,调用的是子类的方法,而不是父类中被重写的方法。
要想调用父类中被重写的方法,则必须使用关键字 super。

相关文章

  • java没有那么难,跟着我一起看看java 多态

    java 多态 多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作...

  • java没有那么难,跟着我一起看看java 抽象类

    java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,...

  • java多态之简述

    Java的第三大特性------>多态 一、什么是多态 多态根据其字面意思就是多种形态的意思,那么在Java中的多...

  • java多态面试题

    java多态性 多态分两种: (1) 编译时多态(设计时多态):方法重载。 (2) 运行时多态:JAVA运...

  • 2018-01-25

    多态机制 java语言,实现多态...

  • java多态面试题

    java多态性 多态分两种: (1) 编译时多态(设计时多态):方法重载。 (2) 运行时多态:JAVA运行时...

  • 学习JavaScript设计模式——面向对象(五)

    面向对象(五) 多态 我仔细看了一下,这里说的JavaScript 的多态好像和Java的多态不一样, Java ...

  • Java 多态之方法调用顺序

    本文例子取于<深入理解java多态性>和,分析 Ja...

  • Java笔记

    Java基础 Java面试通关要点 1.面向对象的特征 封装 继承 多态 封装继承多态 2.final,final...

  • java项目设计与思路

    与其和大多数Java教程一样,先讲变量,再说继承和多态,再讲数组。还不如直接来看看,我们学习java,能做些什么?...

网友评论

    本文标题:java没有那么难,跟着我一起看看java 多态

    本文链接:https://www.haomeiwen.com/subject/ziilbltx.html