23: "A a new A();" ilk basta "A a = new A()" olmali ama bu da calismaz, Cunku A bir abstract class bu nedenle bundan bir obje yaratilmaz. Bu satir gereksiz ve hatali
2: methodA diye bir method yaratilmis, bu method abstract bir sinif icinde. 1. satirda tanimlanan abstract sinif en az bir abstract method barindirmali. yani methodA abstract olmali su sekilde "abstract public void methodA();"
4: 2.satirda methodA abstract yapmak zorunda kaldigimiz icin bir alt sinifta o methodu uygulamak gerekir. yani class b icine methodA yazmamiz zorunluluk oldu. su sekilde "public void methodA() {}"
8: class B icinde methodA tamimladik ve bunu public yapmak zorundaydik. cunku abstract methodA da public olarak tanimlanmistir. class C da ise methodA private olarak tanimlanmis, yani methodun erisebilirligini daraltiyor. alt sinif extend ettigi sinifin methodunun erisebilirligini daraltamaz. o nedenle bu satir su sekilde olmali "public void methodA(){System.out.println();}"
12: b diye bir degiskene a referansi atanmis. Ama b hicbir yerde tanimlanmamis. tahminime gore (isimden dolayi) class B icinde "int b;" gibi bir tanimlama yapmak gerekir.
17: "super(a);" super class cagrisi constructor icinde ilk satirda cagirilmali yani "super(++a);" olmali
18: y referansi cagiriilmis ve methodD static bir method. y referansi da static olmasli, ya da methodD static olmamali ikisinden biri. cunku static methodlar sadece static method, class, referans cagirabilir, instance cagiramaz.
19: x degerine a referansi atanmis ama x 15. satirda final olarak tanimlanis. ya 15. satirdaki final silinmeli, ya da 19. satir tamamen silinmeli. Cunku final olarak tanimlanmis bir hafiza alani degistirilemez.
Final kod:
abstract class A {
abstract public void methodA();
} // end class A
class B extends A {
int b;
public void methodA() {
}
private void methodB() {
System.out.println();
}
} // end class B
class C extends B {
public void methodA() {
System.out.println();
}
public A methodC(B b) {
return b;
}
public C(int a) {
b = a;
}
} // end class C
class D extends C {
private int x;
private int y;
public D(int a) {
super(++a);
}
public void methodD() {
System.out.println(y);
}
public void methodD1(int a) {
x = a;
}
} // end class C
public class E {
public static void main(String [] args) {
A a1 = new C(1).methodC(new B());
D d1 = new D(2);
} // end main
27 } // end class E
0