c++ protected_合理使用protected关键字,确保类属性的安全性
繼承和組合的選擇
我們之前學(xué)過,繼承是隱式的,組合是顯示的,其實實際當(dāng)中組合和繼承都可以在新的類里面放他們的子對象。不過區(qū)別是,組合中成員對象一般都是private修飾的,但是為了讓用戶直接訪問新類里面組合對象,就需要將組合的成員對象設(shè)置為public。
我們來看一個例子:
class E {
public void s(){}
public void r(){}
public void s(){}
}
class W {
public void i(int p){}
}
class WD {
public void ru(){}
public void rd(){}
}
class D {
public WD wd = new WD();
public void op(){}
public void cl(){}
}
public class C{
public E e = new E();
public W[] w = new W[4];
public D
l = new D(),
r = new D();
public C() {
for(int i = 0; i < 4; i++){
w[i] = new W();
}
}
public static void main(String[] args) {
C c = new C();
c.l.w.ru();
c.w.[0].i(60);
}
}
對于繼承而已,我們一般可以把它當(dāng)做公共類來用,也就是說導(dǎo)出類是專用類,基類是通用的公共類,也可以稱為通用類。
如何使用protected關(guān)鍵字
protected關(guān)鍵字的訪問權(quán)限是介于private和public之間的,比如有時候我們不想讓類的用戶訪問某個成員,但是又想讓導(dǎo)出類和同一個包里面的類訪問,那么就可以使用protected關(guān)鍵字來實現(xiàn)。但是通常我們不建議用protected關(guān)鍵字來修飾類的成員,一般建議用private關(guān)鍵字來修飾,確保類屬性的安全性,但是我們可間接使用protected方法來實現(xiàn)導(dǎo)出類和同一個包類的訪問權(quán)限。
我們來舉個例子看一下:
class V {
private String name ;
protected void set(String n){ name = n;}
public V (String name){ this.name = name}
public String toString(){
return “is ” + name;
}
}
public class C extends V{
private int or;
public C(String name, int or) {
super(name);
this.or = or;
}
public void change(String name,int or) {
set(name);
this.or = or;
}
public String toString(){
return “C ” + or+”: ” +super.toString();
}
public static void main(String[] args) {
C c = new C(“LL”,10);
print(c);
c.change(“B”,20);
print(c);
}
}
/*Output:
C 10: is LL
C 19: is B
通過這個例子我們可以看出,change()方法之所以可以調(diào)用方法set(),就是因為方法set()的訪問權(quán)限是protected。
除此之外,而且我們還可以看出導(dǎo)出類C里面的toString()方法重寫了基類的方法。
向上轉(zhuǎn)型
繼承的概念中,導(dǎo)出類可以看作是基類的一種類型。比如現(xiàn)在有一個樂器類I作為基類,還有一個吉他類J作為導(dǎo)出類,我們來看一下用這兩個類來書寫的例子,我們會理解的更加透徹:
class I {
public void play()
static void r(I i){
i.play();
}
}
public class W extends I {
public static void main(String[] args) {
W w = new W();
I.r(w);
}
}
在這個例子中我們看到,r()方法本應(yīng)該傳遞一個I類型的參數(shù),但實際卻傳遞了一個W類型的參數(shù),這很讓人費解,但是也沒有報錯。其實這塊進(jìn)行了一個向上的轉(zhuǎn)化,叫做向上轉(zhuǎn)型,也就是說將W類型轉(zhuǎn)為了I類型,是一個向上的過程。
向上轉(zhuǎn)型是屬于安全的轉(zhuǎn)型,但是在轉(zhuǎn)型的過程中,會丟失基類中沒有的方法。與向上轉(zhuǎn)型相反的就是向下轉(zhuǎn)型,也就是基類或者叫通用類轉(zhuǎn)為專用類或者叫導(dǎo)出類。
講到這里,我們都知道,繼承和組合都可以復(fù)用代碼,但是什么時候使用繼承,什么時候使用組合,這就需要分析一下,我們需要向上轉(zhuǎn)型不,如果需要向上轉(zhuǎn)型,就要使用繼承,如果不需要向上轉(zhuǎn)型,那就最好不要用繼承。
總結(jié)
以上是生活随笔為你收集整理的c++ protected_合理使用protected关键字,确保类属性的安全性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给老人选择舒适的床垫 哪个品牌的床垫最好
- 下一篇: 多幸运用英语怎么说 小幸运呢怎么写(多幸