簡體   English   中英

這兩種說法有什么區別?

[英]What is the difference between the two statements?

我使用兩個語句創建對象,兩者之間有什么區別嗎?

public interface vehicle 
{
void accelerate () ;

}


class bmw  implements vehicle
{
void accelerate () 
{
System.out.println (" top speed of 300kmph " ) ; 
}
}

public class driver 
{
public static void main (String qw [] )  
{
vehicle v = new bmw () ; // statement 1 
v.accelerate () ;

bmw b = new bmw()  ; // statement 2 
b.accelerate() ;
} 

}

這兩個語句都給出了相同的輸出,但我認為兩者之間存在一些差異。

變量 'y' 它是私有的,所以你不能直接從你的子類訪問它。 但是您可以組織對這個變量的訪問,創建公共方法。

所以你什么時候打電話:

subclass.show ( 23 , 45 );

您不是直接訪問“A”類的“y”屬性,而只是訪問其中定義的公共方法,其中您正在使用“y”。 您可以這樣做,因為它是 'A' 類中的一個方法。

試圖更好地解釋:

在這種情況下,私有修飾符讓您的屬性無法從子類訪問。 所以你不能這樣做:

 B b = new B();
 b.y = 10;

因為您無法直接訪問此屬性。 所以現在您可以定義子類如何使用公共方法訪問這個私有屬性。 最好的例子是 getter 或 setter:(必須在超類中定義這些方法)

Public int getY(){
  Return this.y;
 }
Public void setY(int y){
  This.y = y;
 }

現在您可以訪問私有屬性 'y' 但您需要調用此公共方法,所以現在您可以執行以下操作:

B b = new B();
b.setY(10);

您將更改 'y' 的值。

現在,根據您的代碼,您沒有創建任何 setter 或 getter,但是您定義了一個方法調用 'show(int,int)',您可以在其中更改 'y' 的值。 這很可能作為 setter 方法工作。 因此,您可以直接訪問此方法,例如:

B b = new B();
b.show(5,10);

因為它是一個公共方法。 在此方法中,您正在對私有屬性進行操作。 因此,最后,私有屬性 'y' 屬於 'A' 超類,任何子類都不能直接訪問,但是您可以管理在 superclassw 中定義公共方法的操作,您可以在其中指定其他類如何訪問超類私有屬性。

我有這個疑問,因為 y 是私有變量,那么 y 怎么屬於對象子類?

'y' 不屬於子類。 正如我之前所說,您只能使用超類中定義的公共方法訪問“私有”屬性。 因此,如果我想更改值或顯示“y”,則只有在超類中存在更改或顯示“y”值的公共方法時,我才能這樣做。

void show (int o ,int e )
{
   x=o ;      // I mean to say ,
   int y ;    // Is this implicitly declared above  ?

   y=e ;
   System.out.println(" x = " + x);
   System.out.println(" y = " + y);
}

在這里你不需要聲明 'int y;' 因為這個方法是在超類中定義的,所以你可以直接訪問“y”。

如果您需要更多,請發表評論。

是的, y 將 b 打印,因為 y 是本地的並且它在打印之前已經初始化。 所以沒有錯誤。

在您的第二個程序中,Y 是 A 類的私有成員,並且在其子類中不能直接訪問。 你已經創建了子類的對象,但你沒有覆蓋父類的show方法。所以父類的show方法意味着A類將被執行,你會在那里找到Y。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM