Java中的抽象和数据隐藏

我试图理解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
上一篇:概率论第四章 - 随机变量的数字特征与极限定理(未完结)


下一篇:java-试图了解桥接模式