我知道有很多关于这个问题的帖子,其中有实时示例的理论解释。这些 OOP 术语非常简单,但对于像我这样的初学者来说更容易混淆。但我在这里期待的不是定义和实时示例,而是期待 java 中的代码片段。
任何人都可以为Java中的每个提供非常小的代码片段,这将有助于我实际理解封装、信息隐藏、抽象和数据隐藏?
我知道有很多关于这个问题的帖子,其中有实时示例的理论解释。这些 OOP 术语非常简单,但对于像我这样的初学者来说更容易混淆。但我在这里期待的不是定义和实时示例,而是期待 java 中的代码片段。
任何人都可以为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
类型下。
为了减少混淆:
封装用于信息隐藏或数据隐藏
封装意味着自包含。Java 中的所有对象都有一组数据和对这些数据进行操作的方法。所以任何对象的用户都不必担心对象是如何工作的。这样您就可以隐藏信息和其他复杂性。
示例:任何 Java 对象都足以代表一个示例。
抽象:这意味着使事情变得通用,即,当您创建基类或接口然后扩展它们以获得您的特定类时,而不是创建一个非常具体的类。
示例: class Animal {} class Lion 扩展 Animal{}
因此,对于 Lion 类,您有一个通用类,即 Animal。这代表抽象
注意KepaniHaole 给出的示例是完美的。
抽象示例:
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;
}
}
在这个例子中,Lion和Cow类实现了Animal接口。Lion和Cow类override
是Animal接口的getType方法。
这里 Lion 和 Cow 是特例,而 Animal 则更为概括。所以这给了你抽象,因为只要你有一个Animal,你就有getType方法来知道它的类型,也就是说,你已经概括了它。
现在,如果你注意到我在Lion和Cow类中将animalType设为私有,这样类外的任何人都无法修改它。这样我就可以从外部对象中隐藏不需要的信息。
所有外部对象都需要getType方法来知道动物的类型。这样,我只将相关信息暴露给外部对象。