这个问题更像是一个面向对象的问题。 #oop 将是一个很好的标签。
回答您的问题:
不,抽象不等于封装和数据隐藏。顺便提一下,抽象和封装都有数据隐藏的概念。但是,它们并不相同。
封装是将变量或方法隐藏在一个类中,以防止来自外部世界的任何变化。 然后我们可以通过 getter/setter 方法控制正在操作的内容。简单的例子是当我们有一个 Person 类时。在这个 Person 类中,假设我们有一个变量来跟踪年龄。现在,我们有一个 GetAge() 方法来返回 Person 的年龄;另一方面,我们修改了 SetAge(int age) 方法,只在传入参数的年龄大于当前年龄时才设置新年龄(因为我们只会随着时间的推移而变老......)。
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");
}
}