接口
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
public interface Shape {
void draw(); // 画图的方法,没有具体实现
}
可以看出里面只有孤孤单单的方法声明而已,并没有具体实现。那方法由谁来实现,没错正是实现所有接口方法的实现类,于是又有一个问题,为什么是所有方法?因为接口里面的方法默认是抽象方法尽管他们并没有abstract修饰,而抽象方法是必须实现的。
抽象类
学习的过程中我们还会接触到一个东西叫做抽象类,这玩意有什么用?为什么要和接口一起讲?
抽象类实际上就是一个被abstract修饰的类,与正常类最大的差别就是他不能被实例化,所以想要调用其中的方法只能通过实例化所继承的子类来调用,而要是在抽象类中定义抽象方法那所继承的子类就必须要将其实现!再仔细联想到接口的定义这两个是不是就有一点相似之处了?所以特地写这篇来加深一下自己的理解。
public abstract class Employee
{
private String name;
private String address;
private int number;
public abstract double computePay();
//其余代码
}
接口和抽象类的联系
相同点
- 都不能直接实例化,一个靠实现类一个靠子类继承
- 其中的抽象方法都必须实现
不同点
- 接口中只能定义常量,也就是必须由static final定义
- 抽象类中是可以提供部分方法实现的
- 非常重要的一点!!一个类可以实现多个接口,但是只能继承于一个抽象类,这是由java特性决定的因为Java不支持多重继承(一个类只能有一个父类)
public interface Movable {
void move();
}
public interface Eatable {
void eat();
}
public class Dog implements Movable, Eatable {
public void move() {
System.out.println("Dog moves");
}
public void eat() {
System.out.println("Dog eats");
}
}
那他们有什么用呢?????这是最关键的问题
两个字,规范。
接口:少林寺武功标准
- 接口的本质: 接口定义了类应该具备的行为或能力,但是不关心这些行为如何具体实现。
- 比喻: 少林寺接口就像是**“少林寺的武功标准”,任何想要学习少林功夫的人(类)都必须遵守这个标准。标准规定了你必须会一些基本的功夫(方法),但它并不管你如何练习这些功夫,具体的实现由你自己来完成。换句话说,接口规定了你能做什么**(例如“练功”),但是不规定你如何做。
// 少林寺接口规定了必须练习的功夫
public interface ShaolinTemple {
void kungFu(); // 所有实现该接口的类必须会“练功”
}
// 大师兄实现了少林寺接口,说明他能练少林功夫
public class MasterBrother implements ShaolinTemple {
@Override
public void kungFu() {
System.out.println("大师兄展示少林功夫!");
}
}
抽象类:方丈
- 抽象类的本质: 抽象类不仅可以包含已实现的方法,还可以包含抽象方法。它允许子类继承通用功能,并且扩展独特的功能。
- 比喻: 方丈可以看作是“少林寺的方丈”。方丈除了会基础的少林功夫外,还掌握了一些秘密武功**。每个方丈(子类)都能继承基础的少林功夫(已实现的功能),但每个方丈也有自己的特殊技能(抽象方法)。子类可以继承这些基础功夫,并重写或扩展这些功夫,继承了基础功夫的同时,也可以展示独特的能力。
// 定义抽象类:方丈,方丈具备基础功夫和特殊的秘密功夫
public abstract class Abbot {
// 基础少林功夫,所有方丈类都具备
public void basicKungFu() {
System.out.println("方丈展示基础少林功夫!");
}
// 每个方丈都有的秘密武功,由子类决定具体实现
public abstract void secretKungFu();
}
// 具体的方丈,继承自Abbot,拥有基础功夫和秘密武功
public class AbbotXuan extends Abbot {
@Override
public void secretKungFu() {
System.out.println("方丈玄展示玄功!");
}
}
public class AbbotYu extends Abbot {
@Override
public void secretKungFu() {
System.out.println("方丈玉展示玉功!");
}
}
写了半个多小时,算是理清楚了
标签:方丈,子类,void,接口,public,搞懂,抽象类 From: https://blog.csdn.net/wdghcfrg/article/details/143578833