Jestem nowicjuszem Java
programowanie i potrzebuję pomocy. Mam klasę abstrakcyjną z jedną metodą nieabstrakcyjną i jedną metodą abstrakcyjną. Z klasy abstrakcyjnej (klasa A) wywołuję metodę podklasy (klasa B) za pomocą "this.getSize();"
(Rozumiem "this"
oznacza typ obiektu, który wywołuje metodę. Więc w tym przypadku -B), ale pojawia się błąd, mówiąc to podczas próby kompilacji klasy A:
" Cannot find symbol - method getSize() "
Myślę, że może wynika to z faktu, że nazywam to metodą abstrakcyjną, ale nie jestem pewien. Proszę o pomoc .. Dzięki.
Oto mój KOD:
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;
}
}
Odpowiedzi:
4 dla odpowiedzi № 1Superklasa nie może odwoływać się do metod z klasy implementującej. Musisz zadeklarować getSize
jako metoda abstrakcyjna.
Klasa
abstract class A {
public int size() {
return this.getSize();
}
abstract public int getSize();
// abstract method
abstract void grow(int f);
}
B. klasa
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
}
}
1 dla odpowiedzi nr 2
Nie zadeklarowałeś żadnego getSize()
metoda w A
. Myślę, że masz zamiar to zadeklarować abstract
w A
.
public abstract int getSize();
Następnie możesz wywołać metodę.