我经历了很多帖子,但没有明白这一点。
我们可以说:抽象=封装+数据隐藏
或者不止于此!!
由于
答案 0 :(得分:1)
这个问题更像是一个面向对象的问题。 #oop将是一个很好的标签,包含在这里。
回答你的问题: 不,抽象不等于封装和数据隐藏。顺便说一句,抽象和封装都有数据隐藏概念。但是,它们并不相同。
封装是关于隐藏类中的变量或方法以防止来自外部世界的任何更改。 然后我们可以控制通过getter / setter方法操作的内容。简单的例子是我们有一个Person类。在这个Person类中,我们假设我们有一个变量来跟踪年龄。现在,我们有一个GetAge()方法来返回Person的年龄;另一方面,我们已经修改了SetAge(int age)方法,只有在传入参数的年龄大于当前年龄时才设置新的年龄(因为我们只是随着时间的推移而变老...)。 / p>
public class Person {
private int age;
public Person(int age) {
this.age = age;
}
public int GetAge() {
return age
}
public void SetAge(int age) {
if (this.age < age) {
this.age = age;
}
}
}
抽象用于提取和突出显示将为通用抽象类或接口共享的主要功能。简单的例子是我们有一个IAnimal的接口。在这个界面中,我们只为Eat(int numOfBowls)和Sleep(double hours)方法创建一个模板。 我们已经为任何动物抽取了必要的方法(这是抽象)。下面的代码将清楚地显示我的意思,但我也举了一个使用继承的例子,这是面向对象编程的另一个主要概念(这里不会涉及,因为它超出了范围从手头的问题)。
public interface IAnimal {
void Eat(int numOfBowls);
void Sleep(double hours);
}
public class Dog : IAnimal {
public void Eat(int numOfBowls) {
// eat numOfBowls passed in
}
public void Sleep(double hours) {
// sleep for number of hours passed in
}
public void Bark() {
Console.WriteLine("woof");
}
}