首页 > hot资讯 > 探究接口和多态关系

探究接口和多态关系

更新时间:2020-10-29 17:47 浏览58次 来源:动力节点

Java中多态是个很难理解的概念,但同时又是非常重要的概念。多态存在的三个必要条件一、要有继承;二、要有重写;三、父类引用指向子类对象。我们从字面上理解,就是一种类型的多种状态,想要理解多态我们就不得不借用接口。本文我们就来探究接口和多态关系


接口(interface)是抽象方法与常量值的集合;从本质上来讲,接口是一种特殊的抽象类,这种抽象类中只包含常量与方法的定义,而没有变量和方法的实现;与继承关系类似,接口与实现类之间存在多态性。


我们先来看看多态的特性:

1.可替换性(substitutability)。多态对已存在代码具有可替换性。

2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。

3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。

4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。

5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。


Java中多态的实现方式:

1.接口实现

2.继承父类进行方法重写

3.同一个类中进行方法重载。


无论工作还是学习中,笔都是我们经常用到的工具。但是笔的种类又非常的繁多,铅笔、签字笔、水笔、毛笔、钢笔...。现在我们要对“笔”进行抽象,抽象成一个抽象父类“Pen”

package com.glmapper.demo.base;

/**

* 抽象父类:笔

* @author glmapper

*/

public abstract class Pen {

//笔的长度

private int length;

//颜色

private String color;

//类型

private String type;

//价格

private double price;

//写字

public abstract void write(String cnt);

public int getLength() {

return length;

}

public void setLength(int length) {

this.length = length;

}

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

public String getType() {

return type;

}

public void setType(String type) {

this.type = type;

}

public double getPrice() {

return price;

}

public void setPrice(double price) {

this.price = price;

}

}现在有两个子类,分别是:铅笔和钢笔。

铅笔类,继承父类Pen,并重写write方法

package com.glmapper.demo.base;

/**

* 铅笔类 继承父类 笔(满足必要条件一:有继承【其实如果是接口的话,implement实现也是可以的】)

* @author glmapper

*

*/

public class Pencil extends Pen{

/**

* 父类的抽象方法委托子类具体实现:覆盖

*/

//满足必要条件二:要有重写【当然,如果是对于write有重载也是可以的,不同的概念而已】

@Override

public void write(String cnt) {

System.out.println("这是一只铅笔写的内容,内容是:"+cnt);

}

}

钢笔类,继承父类Pen,并重写write方法

package com.glmapper.demo.base;

/**

* 钢笔类 继承父类 笔

* @author 17070738

*

*/

public class Fountainpen extends Pen{

@Override

public void write(String cnt) {

System.out.println("这是一支钢笔写的内容,内容是:"+cnt);

}

}


测试:

package com.glmapper.demo.base;

public class MainTest {

public static void main(String[] args) {

/* Pen pen= new Pencil();*/

//必要条件三:父类引用指向子类对象。

Pen pen= new Fountainpen();

pen.write("我是一支笔");

}

}

输出结果:这是一支钢笔写的内容,内容是:我是一支笔

说明可替换性:多态对笔Pen类工作,对其他任何子类,如铅笔、钢笔,也同样工作。可扩充性:在实现了铅笔、钢笔的多态基础上,很容易增添“笔”类的多态性。


总而言之,接口和多态关系用一句话可以概括,接口和抽象类都是多态。假设我要拿遥控器打开电器,接口和抽象类多态的侧重点不同。接口的侧重点在遥控器,多态的侧重点在电器。


通过上面的实例,我们知道了接口和多态关系微妙,接口可以看作是多态,而多态的实现方式又需要借助接口。想要彻底弄清楚多态和接口关系,我们在观看完本站的Java接口教程之后,或许会有更深的感悟。


热门课程推荐

全部班型支持免费试学

动力节点在线报名表(此信息已加密,请放心填写)

返回顶部