2017-02-09 10 views
-2

私は二つの文を使用してオブジェクトを作成し、両者の間に違いはありますか?2つのステートメントの違いは何ですか?

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() ; 
} 

} 

両方のステートメントは同じ出力を与えていますが、私は2つの違いがあると思います。

+4

[フィールド、変数、属性、およびJava POJOのプロパティの間?](http://stackoverflow.com/questions/10115588/what-is-the-difference-between-field-variable-attribute-and-property-in-java ) –

+0

'' y''がサブクラスに属していると思いますか? '' show''メソッドは '' A''で定義されています。 – f1sh

答えて

3

変数あなたはサブクラスから直接アクセスすることはできませんので、「y」はそれがプライベートです。 しかし、あなたはpublicメソッドを作成し、この変数へのアクセスを整理することができます。だから、

あなたが呼んでいる:

subclass.show (23 , 45); 

あなたは「Y」「A」クラスの属性だけ、あなたが「Y」を使用しているどこに定義されている公共の方法に直接アクセスしていません。それは 'A'クラスのメソッドなのでできます。

は、より良い説明しよう:

private修飾子は、このケースであなたの属性は、サブクラスからづけしていないとします。この属性に直接アクセスすることはできませんので

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

をだから今は、サブクラスがパブリックメソッドで、このプライベート属性にアクセスする方法を定義することができる最良の例は次のようになります。だから、 "tがこれを行うことができます。ゲッターやセッター:(この方法は、あなたのスーパークラスで定義する必要が)

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

今、あなたはプライベート属性「Y」にアクセスできますが、あなたは今、あなたが行うことができます。このパブリックメソッドを呼び出す必要があります:

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

そして、あなたは「Y」の値を変更します。

yuorコードによれば、セッターやゲッターは作成されていませんが、 'y'の値を変更する場合は、メソッド呼び出し 'show(int、int)'を定義しました。 これはセッターメソッドとして動作する可能性があります。それは公共の方法だからです

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

: は、だから、この方法のように直接アクセスすることができます。このメソッドの内部では、private属性の操作を行っています。 最後に、プライベート属性 'y'は 'A'スーパークラスに属し、どのサブクラスからも直接アクセスすることはできませんが、他のクラスがスーパークラスプライベート属性にアクセスする方法を指定するsuperclaswでパブリックメソッドを定義する操作を管理できます。

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); 
} 

Y 'をint型;'このメソッドはスーパークラスで定義されているため、 'y'に直接アクセスできます。

もっと必要な場合はコメントしてください。

+0

あなたがもっと知りたいことを教えてください。もっと編集して、もっと役に立つものを追加することができます。 – Mike

+0

サブクラス「Y」では、スーパークラスの属性です。プライベートなので、サブクラスは直接アクセスできません。 – Mike

+0

"y = e"とすると、ローカル変数ではない属性である "y"の値が変更されるので、実際はありません。 – Mike

0

はい、yはローカルであり、印刷前に初期化されているため、yが出力されます。エラーはありません。

2番目のプログラムでは、YはクラスAのプライベートメンバーであり、その子クラスでは直接アクセスできません。あなたはサブクラスのオブジェクトを作成しましたが、親クラスのshowメソッドをオーバーライドしていません。したがって、親クラスのshowメソッドはクラスが実行されることを意味し、Yが見つかります。

関連する問題