接口(上)学习:https://blog.csdn.net/hewenqing1/article/details/103547259
三、类与类,类与接口以及接口与接口的关系
- 类与类
- 类与接口
- 接口与接口
1、类与接口:实现关系,可以单实现,也可以多实现。并且还可以在继承一个类的同时实现多个接口。
一个类只能继承一个类,但是能实现多个接口。代码测试如下:
//定义接口:Father
interface Father {
public abstract void show();
}
//定义接口:Mother
interface Mother {
public abstract void show2();
}
//接口的实现
//class Son implements Father,Mother //多实现 (默认是extends Object )
class Son extends Object implements Father,Mother {
public void show() { //方法重写
System.out.println("show son");
}
public void show2() {
System.out.println("show2 son");
}
}
class InterfaceDemo3 {
public static void main(String[] args) {
}
}
代码改进如下,注意,调用方法时只能是调用对应的接口中的方法
//定义接口:Father
interface Father {
public abstract void show();
}
//定义接口:Mother
interface Mother {
public abstract void show2();
}
//接口的实现
class Son extends Object implements Father,Mother {
public void show() { //方法重写
System.out.println("show son");
}
public void show2() {
System.out.println("show2 son");
}
}
class InterfaceDemo3 {
public static void main(String[] args) {
//创建对象
Father f = new Son();
f.show(); //调用对应的接口中的方法
//f.show2(); //报错
Mother m = new Son();
//m.show(); //报错
m.show2();
}
}
2、接口与接口: 继承关系,可以单继承,也可以多继承。一个接口能继承另一个接口,这和类之间的继承比较相似。测试代码如下,不会报错,其中测试类省略,所以说接口可以单继承和多继承。
//定义接口:Father
interface Father {
public abstract void show();
}
//定义接口:Mother
interface Mother {
public abstract void show2();
}
//接口单继承
//interface Sister extends Father {}
//接口多继承
interface Sister extends Father,Mother {
}
一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。
public interface Sports
{
public void setHomeTeam(String name);
public void setVisitingTeam(String name);
}
public interface Football extends Sports
{
public void homeTeamScored(int points);
public void visitingTeamScored(int points);
public void endOfQuarter(int quarter);
}
public interface Hockey extends Sports
{
public void homeGoalScored();
public void visitingGoalScored();
public void endOfPeriod(int period);
public void overtimePeriod(int ot);
}
在Java中,类的多继承是不合法,但接口允许多继承。
在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。 如下所示:
public interface Hockey extends Sports, Event
以上的程序片段是合法定义的子接口,与类不同的是,接口允许多继承,而 Sports及 Event 可能定义或是继承相同的方法
四、标记接口(来自网络解释,懵懂略)
最常用的继承接口是没有包含任何方法的接口。
标记接口是没有任何方法和属性的接口.它仅仅表明它的类属于一个特定的类型,供其他代码来测试允许做一些事情。
标记接口作用:简单形象的说就是给某个对象打个标(盖个戳),使对象拥有某个或某些特权。
例如:java.awt.event 包中的 MouseListener 接口继承的 java.util.EventListener 接口定义如下:
package java.util;
public interface EventListener {}
没有任何方法的接口被称为标记接口。标记接口主要用于以下两种目的:
- 建立一个公共的父接口:
正如EventListener接口,这是由几十个其他接口扩展的Java API,你可以使用一个标记接口来建立一组接口的父接口。例如:当一个接口继承了EventListener接口,Java虚拟机(JVM)就知道该接口将要被用于一个事件的代理方案。
- 向一个类添加数据类型:
这种情况是标记接口最初的目的,实现标记接口的类不需要定义任何接口方法(因为标记接口根本就没有方法),但是该类通过多态性变成一个接口类型。