2016-11-12 17 views
-1

抽象クラス(MainAbstract.java)で3つのプライベート変数にアクセスして、以前のクラスから拡張された(SubAbstract.java)前述の抽象クラス。非抽象クラスを抽象クラスで非抽象メソッドに値を代入する

メインクラスのgetters()とsetters()にアクセスしたいと思います。

メインクラス(これは抽象クラス)には、ShowInfo()という抽象メソッドがあります。

このShowInfo()抽象メソッドは、サブクラスの各インスタンスを表示するために何かを行う必要があります。

以下はMainClass(Abstract)とSub Class SubAbstractのソースコードです。それらを参照してください。

MainAbstract.java

package abstractionexample; 
public abstract class MainAbstract { 

    private String sName; 
    private String sType; 
    private int iQty; 

    public String getsName() { 
     return sName; 
    } 

    public void setsName(String sName) { 
     this.sName = sName; 
     } 

    public String getsType() { 
     return sType; 
     } 

    public void setsType(String sType) { 
     this.sType = sType; 
    } 

     public int getiQty() { 
     return iQty; 
    } 

     public void setiQty(int iQty) { 
      this.iQty = iQty; 
     } 

     public abstract void showInfo(); 

     public static void main(String[] args) {  

     } 
    } 

SubAbstract.java

package abstractionexample; 

public class SubAbstract extends MainAbstract{ 

    @Override 
    public void showInfo() { 

    } 

    //This is an instance and the getters() and setters() should use each instance of this kind of to get values and set values. 
    SubAbstract nSubAbs = new SubAbstract(); 

} 
+0

あなたの質問は何か分かりません。しかし、サブクラスを含む外部クラスからprivateメンバーにアクセスすることはできません。 –

+0

あなたは正しいです!だから私はgetters()とsetters()を使ったのです。私はそのトリックを行う可能性を見出そうとしています。 – ChiranthakaJ

+1

showInfo()メソッドが空のままである限り、何も表示されません。あなたは何を期待していますか? – Heri

答えて

0

私が正しく理解していれば、あなたは、インスタンスのプロパティを設定するsetterメソッドを使用したいですnSubAbsを用いてこれらの特性を示す方法。それは親クラスからMainAbstract

を継承しているので、

ゲッターとセッターは、サブクラスSubAbstractであなたに容易に利用可能ます。ここのサンプルコードを示します:

class SubAbstract extends MainAbstract{ 

    SubAbstract nSubAbs; 

    SubAbstract(int iQty, String name, String type) { 
     nSubAbs = new SubAbstract(); 
     this.nSubAbs.setiQty(iQty); 
     this.nSubAbs.setsName(name); 
     this.nSubAbs.setsType(type); 
    } 

    private SubAbstract() { 
     //no arg constructor 
    } 

    @Override 
    public void showInfo() { 
     System.out.println("iQty:" + nSubAbs.getiQty()); 
     System.out.println("name:" + nSubAbs.getsName()); 
     System.out.println("type:" + nSubAbs.getsType()); 
    } 
} 

そして、あなたの主な方法MainAbstractクラスはこのようになります(これはメインメソッドにとって非常に悪い場所ですが、実験しようとしています)。

public abstract class MainAbstract { 

    //..existing code.. 

    public static void main(String[] args) { 

     SubAbstract subAbstract = new SubAbstract(10, "someName", "someType"); 
     subAbstract.showInfo(); 
    } 
}