接口

Java 核心
第 2 级 , 课程 7
可用

“你好,阿米戈!今天,我们会进行一些探索。今天的主题是,此处应有掌声,接口。

“会。今天真是个好日子,我要回家泡个热水澡。”

接口是抽象与多态的子嗣。接口很像是抽象类,其中的所有方法都是抽象的。它声明的方法和类一样,但是带有关键字interface。下面是一些示例:”

代码 说明和事实
interface Drawable
{
void draw();
}
interface HasValue
{
int getValue();
}
1) 这里不写 class,而是写 interface

2) 它只包含抽象方法(不用额外写 abstract)。

3) 事实上,所有接口上的方法都是 public。

interface Element extends Drawable, HasValue
{
int getX();
int getY();
}
接口只可继承其他接口。

你可以有很多父接口。

class abstract ChessItem implements Drawable, HasValue
{
private int x, y, value;

public int getValue()
{
return value;
}

public int getX()
{
return x;
}

public int getY()
{
return y;
}

}
类可以继承多个接口(但只可以继承一个类)。若要显示这个继承,我们可以使用关键字 implements

ChessItem  类被声明为 abstract:它实现所有继承的方法,除了 draw。

换句话说,ChessItem  包含一个抽象方法: draw()

“真有趣。但为什么需要接口呢?什么时候要使用接口呢?

“与类相比,接口有两大优势:”

1) 区分“方法定义”与方法实现。

之前我们说过,如果你想让其他类可以调用你类里的方法,你可以将它们标为 public。如果你想让自己类中的部分方法被调用,那么你可以将它标为 private。换言之,我们大体上可以将类的方法分为两种类别:“给众人”和“只给自己”。

我们可以使用接口进一步强化这个分法。我们让“给众人的类”继承另一个“只给自己的类”。就像下面这样:

之前
class Student
{
 private String name;

 public Student(String name)
 {
  this.name = name;
 }

 public String getName()
 {
  return this.name;
 }

 private void setName(String name)
 {
  this.name = name;
 }
之后
interface Student
{
 public String getName();
}

class StudentImpl implements Student
{
 private String name;
 public StudentImpl(String name)
 {
  this.name = name;
 }
 public String getName()
 {
  return this.name;
 }
 private void setName(String name)
 {
  this.name = name;
 }
}
之前
public static void main(String[] args)
{
 Student student =
               new Student("Alibaba");
 System.out.println(student.getName());
}
之后
public static void main(String[] args)
{
 Student student =
               new StudentImpl("Ali");
 System.out.println(student.getName());
}

我们把类分为两部分:接口以及实现此接口的类

“那这样做的优点是什么呢?”

“同样的接口可以由不同的类实现(继承)。每个类都可以有自己的行为。就像 ArrayListLinkedList 是 List 接口的两个实现一样。

因此,我们不仅会隐藏不同的实现,还会隐藏包含这些实现的类(我们可以只用代码里的接口)。这会给我们很大的灵活性,就算是程序正在运行的时候,我们也可以灵活地替换部分对象,改变对象的行为,而不让其他使用此对象的全部类所知。

与多态结合使用,接口就更能成为我们的得力帮手。现在,我们一眼看出为何使用接口。如果你遇到一个包含数十个或成百上千的类的程序,你就会认识到接口如何能大大简化你的生活。

2) 多重继承。

Java 里,每个类只可以有一个父类。但在其他编程语言里,类通常可以有多个父类。虽然这个很方便,但也会带来很多问题。

Java 提供了一个折中的方案: 虽然没办法继承多个类,但你可以实现多个接口。接口可以有多个父接口。 类可以实现多个接口,并继承唯一父类。

评论 (9)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
WL Lu 级别 14,Stuttgart,Germany
2 六月 2024
看不懂的建议去读以下head first java,里面面向对象里讲的非常棒
冲击 级别 18,Seattle,China
11 十二月 2023
有人给我解释一下吗 还是不怎么懂
Qin-1999 级别 22
9 一月 2024
我来我来,意思就是一个类可以通过implements 后面+接口名来实现接口,接下来,这个类里面就可以使用接口内定义的这些方法,而一个类可以接入多个接口(implements 后面+接口名1+接口名2+接口名3+接口名4。。。),但继承只能继承一个类。
学不了一点 级别 22,United Kingdom,中国
13 五月 2023
打卡!
Squad303 级别 16,China,China
10 八月 2022
我超OP
阿狼 级别 32,Zhengzhou,China
13 六月 2022
没看懂,感觉第一个图里面多了一个接口,但是下面的代码和左边没有接口的代码完全相同。 这有什么意义吗?不是增加了代码量吗?
阿狼 级别 32,Zhengzhou,China
13 六月 2022
看了下一节,好像有点明白了
sky 级别 22
17 八月 2022
这么优秀都30级了
Grateful 级别 16,China,China
12 五月 2022
此处应有掌声,接口。