我试图理解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();
}
}
在这里,您不知道a指的是哪种Animal,但您仍然可以听到两次声音.
更新
我添加该类是因为Demo类没有太多隐藏:它需要了解Dog类,因为它创建了它的一个实例.另一方面,OutsideWorld类却不知道:它仅了解Animal类以及Animal公开的类.它甚至不知道Dog类是否存在.
现在,我们可以使用不同的方法sound(“喵”)实现编写Cat类,并且仍然可以对Cat使用相同的soundTwice方法.
然后,我们可以重写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