我试图理解 java 中抽象的概念。当我阅读一些教程时,他们说抽象是一个过程,您只显示“相关”数据并向用户“隐藏”对象的不必要细节。
这是抽象类如何工作的一个简单示例。
public class Demo {
public static void main(String[] args) {
Animal a = new Dog();
a.sound();
}
}
abstract class Animal {
abstract void sound();
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("woof");
}
}
我知道虽然抽象类我们可以在子类中实现通用方法,比如 sound()
方法。
我不明白的是,这如何帮助隐藏数据和仅查看必要的数据。
请向我解释一下这个概念。
如果您有很好的例子,请也包括在内。
最佳答案
在您的示例中,您创建了一只狗
,然后将其用作动物。在这种情况下,抽象不是很有用,因为您知道变量 a
总是指狗。
现在假设在其他一些类中你有一个方法soundTwice
:
class OutsideWorld {
static void soundTwice(Animal a) {
a.sound();
a.sound();
}
}
在这里你不知道Animal
a
指的是什么类型,但你仍然可以发出两次声音。
更新
我添加这个类是因为类 Demo
没有隐藏太多:它需要了解类 Dog
因为它创建了它的一个实例。另一方面,类 OutsideWorld
则不知道:它只知道类 Animal
以及类 Animal
公开的内容。它甚至不知道类 Dog
的存在。
我们现在可以编写一个 Cat
类,使用不同的方法 sound
("meow") 实现,我们仍然可以使用相同的 soundTwice
方法与 Cat
。
然后我们可以重写 Demo
类:
public class Demo {
public static void main(String[] args) {
Animal a = new Dog();
OutsideWorld.soundTwice(a);
a = new Cat();
OutsideWorld.soundTwice(a);
}
}
当然,这会产生输出:
woof
woof
meow
meow
关于java - java中的抽象和数据隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48805899/