[英]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.