CodeGym /課程 /Java 核心 /接口不僅僅是接口。這是一種行為。

接口不僅僅是接口。這是一種行為。

Java 核心
等級 2, 課堂 8
開放

“你好,阿米戈!又是我。我想給你關於接口的另一種觀點。你看,大多數時候類是特定對象的模型。相比之下,接口更像是對象的能力或角色,而不是對象本身。”

例如,汽車、自行車、摩托車和車輪等事物最好表示為類和對象。但是他們的能力,比如“我可以移動”、“我可以載人”和“我可以停車”,最好用界面來表示。看看這個例子:

Java代碼 描述
interface Moveable
{
void move(String newAddress);
}
對應移動能力。
interface Driveable
{
void drive(Driver driver);
}
對應移動能力。
interface Transport
{
void addStuff(Object stuff);
Object removeStuff();
}
對應運載貨物的能力。
class Wheel implements Moveable
{
...
}
一個 «wheel» 類。有移動能力。
class Car implements Moveable, Drivable, Transport
{
...
}
一個“汽車”類。具有移動、由人駕駛和運載貨物的能力。
class Skateboard implements Moveable, Driveable
{
...
}
一個“滑板”類。具有移動和被人控制的能力。

接口極大地簡化了程序員的生活。程序通常有數千個對象、數百個類和幾十個接口(角色)。角色很少,但可以通過多種方式(類)進行組合。

重點是您不必編寫定義與其他每個類交互的代碼。您所要做的就是與角色(接口)進行交互。

想像一下,你是一個機器人建造者。你有幾十個下屬機器人,每個機器人都可以擁有多種技能。假設你需要緊急完成一堵牆的建造。您只需將所有具有“建造”能力的機器人帶走,然後告訴它們建造牆即可。你真的不在乎是哪個機器人做的。讓它成為一個機器人噴壺。如果它知道如何構建,就讓它構建。

這是它在代碼中的樣子:

Java代碼 描述
static interface WallBuilder
{
void buildWall();
}
能夠“建造一堵牆”。理解命令«建造一堵牆»(有適當的方法)。
static class WorkerRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class GuardRobot implements WallBuilder
{
void buildWall()
 {
…
 }
}
static class WateringCan
{
…
}
具有這種能力/技能的機器人。

噴壺不能建牆(它沒有實現 WallBuilder 接口)。

public static void main(String[] args)
{
 //add all robots to a list
 ArrayList robots = new ArrayList();
 robots.add(new WorkerRobot());
 robots.add(new GuardRobot());
 robots.add(new WateringCan());

 //build a wall if you can
 for (Object robot: robots)
 {
  if (robot instanceof WallBuilder)
  {
   WallBuilder builder = (WallBuilder) robot;
   builder.buildWall();
   }
  }
 }
}
我們如何下達建造一堵牆的命令?

“這太有趣了。我做夢也沒想到界面會成為如此有趣的話題。”

“然後是一些!再加上多態性,這真是令人驚嘆。”

3
任務
Java 核心, 等級 2, 課堂 8
上鎖
Code entry
Sometimes you don't need to think, you just need to hammer it out! As paradoxical as it may seem, sometimes your fingers will "remember" better than your conscious mind. That's why while training at the secret CodeGym center you will sometimes encounter tasks that require you to enter code. By entering code, you get used to the syntax and assimilate some material. What's more, you combat laziness.
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION