【问题标题】:Inserting Values to Non Abstract Methods in Abstract Class Using a Sub Non Abstract Class使用子非抽象类将值插入抽象类中的非抽象方法
【发布时间】:2017-03-26 13:03:33
【问题描述】:

我想访问和使用从前面提到的抽象类扩展 (SubAbstract.java) 的另一个类的抽象类 (MainAbstract.java) 中的 3 个私有变量。

我想从子类访问主类的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();  

 }

【问题讨论】:

  • 我不确定你的问题是什么。但是您不能从任何外部类(包括子类)访问private 成员。
  • 你是对的!这就是我使用 getters() 和 setters() 的原因。我正在努力寻找一种可能性。
  • 只要您的 showInfo() 方法保持为空,当然不会显示任何内容。你期待什么?
  • 正如问题所暗示的,我想在 SubAbstract 类的 MainAbstract 类中使用 getters() 和 setters() 。那我该怎么做呢?

标签: java oop abstract-class abstraction


【解决方案1】:

如果我理解正确,您想使用 setter 方法设置实例 nSubAbs 的属性,并使用 showInfo() 方法显示这些属性。

getter 和 setter 在您的子类 SubAbstract随时可用,因为它继承自父类 MainAbstract

这是一个代码示例:

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 类的 main 方法看起来像这样(虽然这是 main 方法的一个非常糟糕的地方,但我想,你正在尝试试验)

public abstract class MainAbstract {

    //..existing code..

    public static void main(String[] args) {

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

【讨论】:

    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 2012-09-21
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    相关资源
    最近更新 更多