栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

java——多态

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java——多态

文章目录
  • 一.多态的概念
  • 二.多态发生的前提条件
  • 三.避免在构造方法中调用重写的方法

一.多态的概念

多态的概念:通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。
总的来说:同一件事情,发生在不同对象身上,就会产生不同的结果。

二.多态发生的前提条件

1.必须在继承体系下。
2.子类必须对父类中的方法进行重写。
3.通过父类的引用调用重写的方法(向上转型)
(上两篇博客解释了重写和向上转型)

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

class Shape{
    public void draw(){
        System.out.println("画图形");
    }
}

class Cycle extends Shape{
    @Override
    public void draw() {
        System.out.println("⭕");
    }
}

class Rect extends Shape{
    @Override
    public void draw(){
        System.out.println("长方形");
    }
}

class Triangle 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 drawShapes(){//多态的优点体现
        Cycle cycle = new Cycle();
        Rect rect = new Rect();
        Flower flower = new Flower();

        Shape[] shapes = {cycle,rect,flower,cycle,rect};
        for(Shape shape:shapes){
            shape.draw();
        }
    }

    public static void main(String[] args) {
        Shape shape1 = new Cycle();
        shape1.draw();

        drawShapes();
    }
}
三.避免在构造方法中调用重写的方法

一段有坑的代码. 我们创建两个类, B 是父类, D 是子类. D 中重写 func 方法. 并且在 B 的构造方法中调用 func

class B {
  public B() {
    // do nothing
    func();
 }
  public void func() {
    System.out.println("B.func()");
 }
}
class D extends B {
  private int num = 1;
  @Override
  public void func() {
    System.out.println("D.func() " + num);
 }
}
public class Test {
  public static void main(String[] args) {
    D d = new D();
    }
}

// 执行结果
D.func() 0

1.构造d对象的同时,会调用B的构造方法。
2.B中的构造方法中调用了 func 方法, 此时会触发动态绑定, 会调用到 D 中的 func
3.此时 D 对象自身还没有构造, 此时 num 处在未初始化的状态, 值为 0.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/984782.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号