Java学习05-多态

Java学习05-初学多态

简述

多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作,如图所示:

一、多态的优点

  1. 消除类型之间的耦合关系

  2. 可替换性

  3. 可扩充性

  4. 接口性

  5. 灵活性

  6. 简化性

二、多态存在的必要条件

  1. 继承
  2. 重写
  3. 父类引用指向子类对象:Father father = new Son();

三、多态的实现方式

1.方式一:重写

代码:

/**
 * @author: TSCCG
 * @date: 2021/5/12
 */
public class PenTest {
    public static void main(String[] args) {
        //父类引用指向子类对象
        Pen pen = new BluePen();
        //调用的是BluePen类的方法,当改成RedPen();时,调用的就是RedPen类中的方法
        pen.paintOn();
        pen.draw();
    }
}
/**
 * 父类
 */
class Pen {
    public void paintOn() {
        System.out.println("涂抹颜料");
    }
    public void draw () {
        System.out.println("画了一幅画");
    }
}

/**
 * 红笔
 */
class RedPen extends Pen {
    @Override
    public void paintOn() {
        System.out.println("涂抹红色颜料");
    }

    @Override
    public void draw() {
        System.out.println("画了一幅红色的画");
    }
}

/**
 * 蓝笔
 */
class BluePen extends Pen {
    @Override
    public void paintOn() {
        System.out.println("涂抹蓝色颜料");
    }

    @Override
    public void draw() {
        System.out.println("画了一幅蓝色的画");
    }
}

结果:

涂抹蓝色颜料
画了一幅蓝色的画
2.方式二:抽象类及抽象方法

代码:

/**
 * @author: TSCCG
 * @date: 2021/5/12
 */
public class PenTest {
    public static void main(String[] args) {
        Pen pen = new RedPen();
        pen.paintOn();
        pen.draw();
    }
}

/**
 * 父类
 */
abstract class Pen {
    /**
     * 1.既然Pen类中draw这一方法在子类中都要重写,那么就不需要在父类中对这一方法进行实现,
     * 可以删去方法体,只定义笔可以draw这一能力就可以了,即抽象方法。
     * 抽象方法必须要在返回类型前添加abstract来声明
     * 2.如果父类中既有抽象方法又有非抽象方法,那么这个类就叫做抽象类
     * 抽象类要在class前加abstract来声明
     */
    public void paintOn() {
        System.out.println("涂抹颜料");
    }
    public abstract void draw();
}

/**
 * 红笔
 */
class RedPen extends Pen {
    @Override
    public void paintOn() {
        System.out.println("涂抹红色颜料");
    }
    /**
     * 子类必须实现父类中的抽象方法
     */
    @Override
    public void draw() {
        System.out.println("画了一幅红色的画");
    }

}

/**
 * 蓝笔
 */
class BluePen extends Pen {
    @Override
    public void paintOn() {
        System.out.println("涂抹蓝色颜料");
    }
    @Override
    public void draw() {
        System.out.println("画了一幅蓝色的画");
    }
}

结果:

涂抹红色颜料
画了一幅红色的画
3.方法三:接口

接口,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。

接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。

除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

代码:

/**
 * @author: TSCCG
 * @date: 2021/5/12
 */

/**
 * 父类
 */
interface Pen {
    //如果父类中全部都是抽象方法,那么这个类就叫做接口
    /**
     * 定义涂抹颜料的方法
     */
    void paintOn();
    /**
     * 定义画画的方法
     */
    void draw();
}

/**
 * 红笔
 */
class RedPen implements Pen {
    /**
     * 子类必须实现接口中所有方法
     */
    @Override
    public void paintOn() {
        System.out.println("涂抹红色颜料");
    }

    @Override
    public void draw() {
        System.out.println("画了一幅红色的画");
    }

}

/**
 * 蓝笔
 */
class BluePen implements Pen {
    @Override
    public void paintOn() {
        System.out.println("涂抹蓝色颜料");
    }

    @Override
    public void draw() {
        System.out.println("画了一幅蓝色的画");
    }
}

结果:

涂抹蓝色颜料
画了一幅蓝色的画
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TSCCG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值