簡體   English   中英

實用示例封裝與信息隱藏與抽象與數據隱藏在Java中

[英]Practical example Encapsulation vs Information Hiding vs Abstraction vs Data Hiding in Java

我知道有很多關於這個問題的帖子,它有實時例子的理論解釋。這些OOP術語非常簡單,但對於像我這樣的初學者來說更加困惑。 我期待這里不是一個定義和實時的例子但是期待java中的代碼片段

請問任何人都可以為Java中的每一個提供非常小的代碼片段 ,這將有助於我理解封裝與信息隱藏與抽象與數據隱藏的實際關系嗎?

封裝=信息隱藏=數據隱藏。 其他人無需為了執行某項任務而知道的信息。

class Girl {
  private int age;
  Girl(int age) {
    this.age = age;
  }
  public boolean willGoOutWithGuy(boolean isGuyUgly) {
    return (age >= 22) && (!isGuyUgly);
  }
}

class Guy {
  private Girl girl = new Girl();
  private boolean isUgly = true;
  public boolean willGirlGoOutWithMe() {
    return girl.willGoOutWithGuy(isUgly);
  }
  // Guy doesn't have access to Girl's age. but he can ask her out. 
}

抽象=同一界面的不同實現。

public interface Car {
  public void start();
  public void stop();
}

class HotRod implements Car {
  // implement methods
}

class BattleTank implements Car {
  // implement methods
}

class GoCart implements Car {
  // implement methods
}

這些實現都是唯一的,但可以綁定在Car類型下。

為了減少混淆:

封裝用於信息隱藏或數據隱藏

封裝意味着自包含 Java中的所有對象都有一組數據和方法來操作該數據。 因此,任何對象的用戶都不必擔心對象的工作方式。 這樣您就可以隱藏信息和其他復雜性。

示例:任何Java對象都足以代表示例。

抽象 :這意味着使事物變得通用,即在創建基類或接口時創建一個非常特殊的類,然后擴展它們以獲得特定的類。

示例: class Animal {}類Lion擴展Animal {}

所以對於Lion類,你有一個通用類,即Animal。 這代表抽象

注意 KepaniHaole的例子givien是完美的。

抽象示例:

public interface Animal{
    public String getType();
}

class Lion implements Animal {
    private String animalType = "WILD";

    @Override
    public String getType() {
        return this.animalType;
    }
}
class Cow implements Animal {
    private String animalType = "Domestic";

    @Override
    public String getType() {
        return this.animalType;
    }
}

在此示例中, LionCow類實現了Animal接口。 LionCowoverrideAnimal接口的getType方法。

獅子和牛是特殊情況,動物更普遍。 所以這給你抽象,因為每當你有一個Animal你有getType方法來知道它的類型,即你已經推廣它。

現在,如果你注意到我已經在LionCow類中將animalType設為私有,那么班級以外的人都無法修改它。 這樣我就可以從外部對象中隱藏不需要的信息。

所有外部對象都需要getType方法來知道動物的類型 這樣我只向外部對象公開相關信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM