Java SE-接口

一、什么是接口

接口就是一种公共的规范标准,大家都可以通用,Java中的接口更多体现在对行为的抽象

二、接口特点

  • 接口用关键字interface修饰

    1
    public interface 接口名{}
  • 类实现接口用implements表示

    1
    public class 类名 implements 接口名{}
  • 接口不能实例化

参照多态的方式,通过实现类对象实例化,这叫接口多态。

多态的形式:具体类多态、抽象类多态、接口多态

多态的前提:有继承或实现关系;有方法重写;有父(类、接口)引用指向(子、实现)类对象

  • 接口的实现类

要么重写接口中的所有抽象方法
要么是抽象类

三、接口的成员特点

  • 成员变量

    只能是常量(默认修饰符:public static final)

  • 构造方法

    接口没有构造方法,因为接口主要是对行为进行的抽象

  • 成员方法

    只能是抽象方法(默认修饰符:public abstract)

四、案例

五、类和接口的关系

  • 类和类的关系

    继承关系,只能单继承,但是可以多层继承

  • 类和接口的关系

    实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口

  • 接口和接口的关系

    继承关系,可以单继承,也可以多继承

六、抽象类和接口的区别

  • 成员区别
抽象类 变量,常量;有构造方法;有抽象方法,也有非抽象方法
接口 只有常量与抽象方法
  • 关系区别
类与类 继承,单继承
类与接口 实现,可以单实现,也可以多实现
接口与接口 继承,单继承,多继承
  • 设计理念区别(重点)
抽象类 对类抽象,包括属性,行为
接口 对行为抽象,主要是行为

接口应用场景

对象门具有开,和关的动作,而报警只针对于某些门,所以用接口来实现报警动作,报警门类继承抽象门类,再实现报警接口。

强调:抽象类是对事物的抽象,而接口是对行为的抽象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public interface Alram{
void alarm();
}
public abstract class Door{
public abstract void open();
public abstract void close();
}
public class AlarmDoor extends Door implement Alarm{
public void open(){
//...
}
public void close(){
//...
}
public void alarm(){
//...
}
}

七、案例

接口

1
2
3
4
5
package interface_3;

public interface LearnEnglish {
public void learnEnglish();
}

People.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package interface_3;

public abstract class People {
private String name;
private int age;
public abstract void eat();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public People(String name, int age) {
super();
this.name = name;
this.age = age;
}
public People() {
super();
}
}

Sportsman.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package interface_3;

public abstract class Sportsman extends People{
public abstract void learn();

public Sportsman() {
super();
// TODO Auto-generated constructor stub
}

public Sportsman(String name, int age) {
super(name, age);
// TODO Auto-generated constructor stub
}

}

coatch.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package interface_3;

public abstract class Coatch extends People{
public abstract String teach();

public Coatch() {
super();
// TODO Auto-generated constructor stub
}

public Coatch(String name, int age) {
super(name, age);
// TODO Auto-generated constructor stub
}

public String teach(String name) {
// TODO Auto-generated method stub
return null;
}
}

test.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package interface_3;

//测试类
public class test {
public static void main(String[] args) {
hoopman hoop=new hoopman();
paddler padd=new paddler();
pinCoatch pin=new pinCoatch();
hoopmanCoatch hoopCoa=new hoopmanCoatch("张哈哈",22);
hoop.eat();
padd.learnEnglish();
padd.learn();
pin.eat();
pin.learnEnglish();
pin.teach();
System.out.println(hoopCoa.teach(hoopCoa.getName()));
}
}
//篮球运动员类
class hoopman extends Sportsman{
@Override
public void learn() {
System.out.println("篮球运动员学习");
}
@Override
public void eat() {
System.out.println("篮球运动员吃饭");
}
}
//乒乓球运动员类
class paddler extends Sportsman implements LearnEnglish{
@Override
public void eat() {
System.out.println("乒乓球运动员吃饭");
}
@Override
public void learnEnglish() {
System.out.println("乒乓球运动员学习英语");
}
@Override
public void learn() {
System.out.println("乒乓球运动员学习");
}

}
//乒乓球教练类
class pinCoatch extends Coatch implements LearnEnglish{
@Override
public void learnEnglish() {
System.out.println("乒乓球教练学英语");
}

@Override
public String teach() {
System.out.println("乒乓球教练教学生");
return null;
}

@Override
public void eat() {
System.out.println("乒乓球教练吃饭");
}
}
//篮球教练类
class hoopmanCoatch extends Coatch{
public hoopmanCoatch() {
super();
}
public hoopmanCoatch(String name, int age) {
super(name, age);
}
@Override
public String teach(String name) {
System.out.println("篮球教练教学生");
String a="篮球教练"+name+"教学生运球";
return a;
}
@Override
public void eat() {
System.out.println("篮球教练吃饭");
}
@Override
public String teach() {
// TODO Auto-generated method stub
System.out.println("教练教学生打篮球");
return null;
}
}

运行结果

请我喝杯咖啡吧~

支付宝
微信