java中数据的隐藏_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

标签:oop,abstraction,data-hiding,java

来源: https://codeday.me/bug/20191109/2012903.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值