Sorunun çözümü yok dolayısıyla emin olamıyorum bulduğum hatalar doğru mu değil mi ...
2. (15 pt) Find only five compliation errors in the following program stored in the file E.java. Make brief explanations for each one. How do you fix these errors? Finding more than five errors results in loss of grades. For each error together with the line number provide a breif explanation. Line numbers are not part of the program.
1 abstract class A {
2 public void methodA();
3 } // end class A
4 class B extends A {
5 private void methodB(){System.out.println();}
6 } // end class B
7 class C extends B {
8 private void methodA(){System.out.println();}
9 public A methodC(B b){
10 return b;}
11 public C(int a){
12 b = a; }
13 } // end class C
14 class D extends C {
15 private final int x;
16 private int y;
17 public D(int a) { ++a;super(a);}
18 public static void methodD(){System.out.println(y);}
19 public void methodD1(int a) { x = a;}
20 } // end class C
21 public class E {
22 public static void main(String [] args) {
23 A a new A();
24 A a1 = new C(1).methodC(new B());
25 D d1 = new D(2);
26 } // end main
27 } // end class E
Error Line Number Explain
1
2
3
4
5
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