3

私はJavaプログラミングの初心者で、助けが必要です。1つの非抽象メソッドと1つの抽象メソッドを持つ抽象クラスがあります。"this.getSize();"抽象クラス(クラスA)から、(メソッドを呼び出すオブジェクトタイプを意味すると理解"this"しています。この場合は-B)を使用して、サブクラス(クラスB)のメソッドを呼び出していますが、次のようなエラーが発生します。これは、クラスAをコンパイルしようとしたときのことです。

" Cannot find symbol - method getSize() "

これは、抽象的なメソッドから呼び出しているためかもしれないと思いますが、よくわかりません。助けてください..ありがとう。

これが私のコードです:

abstract class A{

    public int size()
    {
        return this.getSize();
    }

    //abstract method
    abstract void grow(int f);
}


class B extends A{
    private int size = 1; //default set of size

    public int getSize(){ return size; }

    public void grow(int factor)
    {
        size = size * factor;
    }
}
4

2 に答える 2

4

スーパークラスは、実装クラスのメソッドを参照できません。getSize抽象メソッドとして宣言する必要があります。

A.class

abstract class A {

    public int size() {
        return this.getSize();
    }

    abstract public int getSize();

    // abstract method
    abstract void grow(int f);

}

B.class

class B extends A {
    private int size = 1; // default set of size

    public int getSize() {
        return size;
    }

    public void grow(int factor) {
        size = size * factor;
    }

    public static void main(String[] args) {
        B b = new B();
        System.out.println(b.getSize()); //Prints 1
    }
}
于 2013-03-15T23:19:36.250 に答える
1

getSize()でメソッドを宣言していませんAabstractで宣言するつもりだと思いますA

public abstract int getSize();

次に、メソッドを呼び出すことができます。

于 2013-03-15T23:20:32.913 に答える