我知道有很多关于这个问题的帖子,它有实时例子的理论解释。这些OOP术语是 非常简单但对像我这样的初学者来说更加困惑。 但是我期待这里没有定义和实时示例,但期待java中的代码片段。
是否有人请为Java 中的每个提供非常小的代码段,这将帮助我理解封装与信息隐藏与抽象与数据隐藏之间的关系实际上吗
答案 0 :(得分:16)
封装=信息隐藏=数据隐藏。为了执行某项任务,其他人不需要知道的信息。
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
类型下。
答案 1 :(得分:5)
减少混淆:
封装用于信息隐藏或数据隐藏
封装意味着自包含。 Java中的所有对象都有一组数据和方法来操作该数据。因此,任何对象的用户都不必担心对象的工作方式。这样你就可以隐藏信息和其他复杂性。
示例:任何Java对象都足以代表示例。
抽象:这意味着使事物变得通用,即在创建基类或接口时创建一个非常特殊的类,然后扩展它们以获得特定的类。
示例:强> class Animal {} Lion 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;
}
}
在此示例中, Lion 和 Cow 类实现 Animal 接口。 Lion 和 Cow 类override
动物界面的 getType 方法。
狮子和牛是特殊情况,动物更普遍。所以这给你抽象,因为每当你有一个动物你有 getType 方法来知道它的类型,即你已经推广它。
现在,如果你注意到我已经狮子和牛类中的 animalType 为私有,那么班级以外的人都无法修改它。这样我就会从外部对象中隐藏不需要的信息。
所有外部对象需要的是 getType 方法,以了解动物的类型。这样,我只向外部对象公开相关信息。