第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用繼承時(shí)如何進(jìn)行強(qiáng)封裝?

使用繼承時(shí)如何進(jìn)行強(qiáng)封裝?

肥皂起泡泡 2022-10-12 09:46:55
我對(duì)此真的很陌生,所以如果這太愚蠢了,我很抱歉。在 Java 中使用繼承時(shí),我很難決定使用哪種可見性。對(duì)于我所讀到的內(nèi)容,要進(jìn)行強(qiáng)大的封裝,您通常將屬性設(shè)置為私有,然后使用公共方法訪問它們。但是當(dāng)你有內(nèi)在的時(shí)候,這是不行的嗎?當(dāng)我閱讀 Oracle 文檔時(shí),它說只有公共/受保護(hù)的成員才會(huì)繼承到子類。但如果我這樣做,我是否打破了封裝?同時(shí),我在我的超類上使用私有屬性,并且我正在使用公共方法訪問我的子類上的這些字段。例如:abstract public class Person{  private String name;  Person(String name){    this.name = name;  }  public String getName(){    return this.name;  }  public void setName(String name){    this.name = name;  }}public class Employee extends Person {  private int salary;  Employee(String name, int salary){    super(name);    this.salary = salary;  }  public void getDescription(){    return "Name is " + getName() + " and salary is " + this.salary;  }}
查看完整描述

4 回答

?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊

也許查看有關(guān)可見性的javadoc,但在您的情況下,protected 是正確的關(guān)鍵字,您也可以忽略可見性,然后默認(rèn)為 package



查看完整回答
反對(duì) 回復(fù) 2022-10-12
?
Smart貓小萌

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊

我打破了封裝嗎?


你沒有破壞任何東西。受保護(hù)的成員對(duì)世界其他地方仍然不可見(不包括包中的類和子類)。


Modifier    Class   Package Subclass    World

private       N        N       N          N

protected     Y        Y       Y          N

如果您需要直接控制受保護(hù)的字段并繞過可能會(huì)扭曲該訪問的 getter/setter,那么受保護(hù)的字段絕對(duì)沒問題。


另一方面,當(dāng)您不經(jīng)常使用該字段時(shí),私有字段是有意義的:private String name;并且"Name is " + getName()是完全正確的,因?yàn)槟魂P(guān)心究竟會(huì)返回什么 - 任何代表名稱的東西就足夠了。


根據(jù)經(jīng)驗(yàn),“使用對(duì)特定成員有意義的最嚴(yán)格的訪問級(jí)別。private除非您有充分的理由不這樣做,否則請(qǐng)使用?!?/p>


查看完整回答
反對(duì) 回復(fù) 2022-10-12
?
慕森王

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊

對(duì)于我所讀到的內(nèi)容,要進(jìn)行強(qiáng)大的封裝,您通常將屬性設(shè)置為私有,然后使用公共方法訪問它們。

對(duì)于強(qiáng)大/適當(dāng)?shù)姆庋b,您將屬性設(shè)置為私有。句號(hào)。您不應(yīng)該通過任何方法訪問這些屬性,而應(yīng)該提供使用這些屬性來實(shí)現(xiàn)某些業(yè)務(wù)邏輯的方法。

[...]它說只有公共/受保護(hù)的成員才會(huì)繼承到子類[...]

一切都將被繼承,只是對(duì)子類不可見。所以它將是對(duì)象的一部分,你不能直接訪問它。

[使用公共/受保護(hù)的屬性] 但是如果我這樣做,我會(huì)破壞封裝嗎?

是的。當(dāng)您使內(nèi)部狀態(tài)可用時(shí),您幾乎總是會(huì)破壞封裝,無論是直接(使其成為私有以外的任何東西),還是使用“getter”或類似方法。


查看完整回答
反對(duì) 回復(fù) 2022-10-12
?
白板的微信

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊

出于強(qiáng)封裝的原因,將屬性設(shè)置為私有并使用諸如 mutators 和 accessors 之類的公共方法訪問它們是一種正確的方法。


但是當(dāng)你有內(nèi)在的時(shí)候,這是不行的嗎?


是的,只有公共/受保護(hù)的成員可以繼承給子類,私有類不能傳遞給子類。


Modifier    Class Package Subclass World

public        Y      Y        Y      Y

protected     Y      Y        Y      N

no modifier   Y      Y        N      N

private       Y      N        N      N

我打破了封裝嗎?


并不真地。根據(jù)定義,封裝是一個(gè)保護(hù)屏障,可以防止數(shù)據(jù)被該屏障之外的代碼訪問,并且一個(gè)類中的數(shù)據(jù)對(duì)其他類是隱藏的。使用受保護(hù)的成員進(jìn)行繼承允許子類訪問數(shù)據(jù)。


但是封裝的概念是對(duì)象內(nèi)部的信息/數(shù)據(jù)是隱藏的,對(duì)象內(nèi)部的屬性或方法只能通過對(duì)象自身提供的接口獲取。也就是說,對(duì)象內(nèi)部的細(xì)節(jié)或邏輯是隱藏的,除非允許對(duì)象提供的方法/接口,否則其他對(duì)象無法理解和改變對(duì)象的內(nèi)部細(xì)節(jié)。


說白了,我們只需要了解對(duì)象的外部,不需要了解內(nèi)部結(jié)構(gòu)。例如,我們可以通過 getDescription() 獲取 Employee 信息,但我們不需要知道如何獲取信息。因此,這似乎是封裝的一種應(yīng)用。


public void getDescription(){

    return "Name is " + getName() + " and salary is " + this.salary;

} // void method can not return a value, modified to the following code

public void getDescription(){

    System.out.println( "Name is " + getName() + " and salary is " + this.salary);

}


查看完整回答
反對(duì) 回復(fù) 2022-10-12
  • 4 回答
  • 0 關(guān)注
  • 140 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)