溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java學(xué)習(xí)之類的屬性(轉(zhuǎn))

發(fā)布時(shí)間:2020-08-10 15:54:19 來(lái)源:ITPUB博客 閱讀:141 作者:BSDLite 欄目:編程語(yǔ)言
Java學(xué)習(xí)之類的屬性(轉(zhuǎn))[@more@] Public、private、protected顯示了三種類中的屬性和服務(wù)的類型,public是可以隨意訪問(wèn)的、private是外界不能訪問(wèn)的(顯示了數(shù)據(jù)的封裝性)、protected說(shuō)明數(shù)據(jù)是受保護(hù)的。下面就來(lái)詳細(xì)講述一下這三個(gè)究竟有什么區(qū)別。

  首先要了解一下包的概念。有若干個(gè)類,它們相互之間有一定的關(guān)系,那么就可以定義一個(gè)包容納這些類,包不僅僅只能包含類,它可以擁有類、接口、構(gòu)件、節(jié)點(diǎn)、協(xié)作,包內(nèi)還可以包含包。
  現(xiàn)在就讓我們來(lái)具體討論一下這三個(gè)種類的不同之處。

  作為public的類和屬性是可以被外界任意調(diào)用的,無(wú)論是在類中,還是跨越類的訪問(wèn)(如果不屬于同一個(gè)包,就要調(diào)用import語(yǔ)句,添加包名),這一點(diǎn)是非常好理解的。

Private的屬性和方法是最自私的,它定義的屬性和方法只能在本類中使用,到類外,是無(wú)論如何都不能被使用的,如:

class Date

{

private int day;

public void tomorrow()

{

this.day = this.day + 1;

}

}

public class DateUser

{

public static void main(String args[])

{

Date mydate = new Date();

mydate.day = 21; //注意這句話是錯(cuò)的

}

}

  在這個(gè)程序中,創(chuàng)建了一個(gè)Date類的對(duì)象mydate,這是可以的,但是由于類Date中的day是私有變量,所以,創(chuàng)建的這個(gè)對(duì)象 mydate不能通過(guò)mydate.day來(lái)訪問(wèn)這個(gè)屬性,如果在其它類中要使用這個(gè)私有變量,那么只能通過(guò)Date中的public的方法來(lái)訪問(wèn)這個(gè)屬性,這樣,就很好的保證了數(shù)據(jù)的封裝性,就像面向?qū)ο笾刑岬降膱?bào)刊亭的故事一樣,購(gòu)買報(bào)刊的人不能自己伸手進(jìn)去拿報(bào)紙或是找零錢,而只能由報(bào)刊亭內(nèi)部人員來(lái)處理這些事情一樣。在上面的例子中,大家可以發(fā)現(xiàn),類Date中的默認(rèn)方法(Date())并沒(méi)有定義它的類型,這就意味著它是友好的,也就是意味著它在本包內(nèi)是public的,而在外包內(nèi)是private的。但是一旦把它的類型定義為private,那么連Date mydate = new Date()也會(huì)出錯(cuò),這是因?yàn)槟J(rèn)的構(gòu)建器已經(jīng)被定義為private類型,也就是即使是本包內(nèi)的其他類也不能訪問(wèn)了。

對(duì)于protected就要考慮到包的概念,如果有兩個(gè)類,如:Date和DateUser兩個(gè)類分別位于不同的包內(nèi),而DateUser是繼承Date 類的一個(gè)類,那么如果要使DateUser中的方法訪問(wèn)Date中的方法或?qū)傩?,除了使用import將包導(dǎo)入,還需要考慮所要訪問(wèn)的方法和屬性是什么類型的,一般而言,跨包訪問(wèn),public的方法和屬性都一定可以訪問(wèn),但是考慮到如果將需要使用的方法和屬性都修改成public的話,那么就可以允許任何事物訪問(wèn),就不具有安全性,為了這個(gè)事情的考慮,添加了protected,如果將需要訪問(wèn)的方法和屬性定義為protected,那么其它的類無(wú)法訪問(wèn),而外包的DateUser通過(guò)import就可以訪問(wèn)這些屬性和方法了,即保證了數(shù)據(jù)的安全性,也保證了數(shù)據(jù)被很好的使用。范例如下:

package a.b;

public class Sample

{

protected void doing();

}

import a.b.*;

public class Sample1 extends Sample

{

public static void main(String args[])

{

Sample1 x=new Sample1();

x.doing();

}

}
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI