更新时间:2020-10-29 17:47:21 来源:极悦 浏览1081次
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接口教程之后,或许会有更深的感悟。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习