我知道有很多关于这个问题的帖子,它们用实时例子解释了理论。这些面向对象编程术语非常简单,但对像我这样的初学者来说更加困惑。
但是,我在这里期望的不是定义和实时例子,而是期望在Java中获得每个概念的小代码片段。这将帮助我更好地理解封装、信息隐藏、抽象和数据隐藏。
封装 = 信息隐藏 = 数据隐藏。 就是在执行某个任务时,不需要让其他人知道的信息。
class Bartender {
private boolean hasBeer = false;
public boolean willGiveBeerToDrinker(int drinkerAge) {
return (hasBeer && (drinkerAge >= 21));
}
}
class Drinker {
private Bartender bartender = new Bartender();
private int age = 18;
public boolean willBartenderGiveMeBeer() {
return bartender.willGiveBeerToDrinker(age);
}
// Drinker doesn't know how much beer Bartender has
}
抽象 = 同一接口的不同实现。
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
类型下。
Interface
的整个目的是提供一种通用的方式来与 Car
层次结构中的对象交互。我给出的三个示例可能会有非常不同的实现方式,但它们仍然可以像相同类型一样使用。这个想法是隐藏实现的“引擎盖下”的细节,同时公开一个单一 API。 - yamafontespublic 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;
}
}
覆盖
了Animal接口的getType方法。封装
是实现此隐藏的一种方式,当您使事物变得普遍时,抽象化就会出现。 - me_digvijay