lxshllmlxk3 2021-05-25 15:59 采纳率: 66.7%
浏览 116
已采纳

面向对象程序设计的一段代码

// A.java

public abstract class A { //class A

 

private int x = 0;

public A(int xx) {

x = xx;

}

public int getX() {

return x;

}

public void addX(int dx) {

x = x + dx;

}

public abstract void method1();

}

 

// B.java

public class B extends A { //Class B

private int y = 0;

public B(int xx, int yy) {

super(xx);

y = yy;

}

public int getY() {

return y;

}

public void addY(int dy) {

y = y + dy;

}

public void method1() {

addX(y);

}

public void method2() {

addY(getX());

}

}

 

// C.java

public class C extends B { //Class C

 

private int w = 0;

public C(int xx, int yy, int ww) {

super(xx, yy);

w = ww;

}

public int getW() {

return w;

}

public void addW(int dw) {

w = w + dw;

}

public void method1() {

addX(w);

}

}

 

// D.java

public class D extends A { //Class D

private int z;

public D(int zz) {

z = zz;

}

public int getZ() {

return z;

}

public void addZ(int dz) {

z = z + dz;

}

public void method1() {

addX(z);

}

}

// E.java

public class E extends A { //Class E

private int z;

public E(int xx, int zz) {

super(xx);

z = zz;

}

public int getZ() {

return z;

}

public void addZ(int dz) {

z = z + dz;

}

public void method2() {

addX(z);

}

}

 

1.请问编辑D,E时为什么会发生错误?稍微具体一点

2.编辑以下3段代码时候会发生错误,请问是哪一行错了为什么?

(1)

A a1 = new A(); //1

a1.addX(50);//2

System.out.println(a1.getX()); //3

(2)

b2 = new B(1, 2); //1

A a2 = b2;//2

a2.method2(); //3

System.out.println(a2.getX()); //4

(3)

B b3 = new B(3, 4);//1

C c3 = b3;//2

c3.method1();//3

System.out.println(c3.getX()); //4

 

急求,五点之前请作答,感激不尽

  • 写回答

11条回答 默认 最新

  • 清枫cc 2021-05-25 16:47
    关注

    第一题:

    D类的构造函数没有调用父类的构造方法。子类必须调用父类构造方法,不写则赠送super(),写了则用写了指定的super调用。super只能是一个,还必须是第一个。这里父类构造函数不是无参构造。

    E类没有重写抽象父类中的所有抽象方法,缺少method1方法。

    第二题:

    (1)

    A a1 = new A(); //1 这行出错,原因是A类是抽象类,不能new创建

    (2)

    b2 = new B(1, 2); //1 这行出错,这个没有指定变量的类型

    (3)

    C c3 = b3;//2 #这行出错

    因为这个B b3 = new B(3, 4);//1这个new的是一个B类对象并且是B类引用。在向下转型时C c3 = b3; 报错,因为本质不是同一个类。

    可以将其改为B b3 = new C(3, 4, 5);  这样是C类对象并且是B类引用,在向下转型是其本质是和C同一类,所以这样可以。

     

     

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?

悬赏问题

  • ¥200 如何使用postGis实现最短领规划?
  • ¥15 pyinstaller打包错误
  • ¥20 cesm的气溶胶排放文件
  • ¥15 逐月累计,月份不连续,补齐月份
  • ¥15 应用简单的Python代码完成一个学生成绩管理系统
  • ¥15 用matlab求微分方程初值问题
  • ¥15 vscode下编写第三方库opencv与pcl代码时没有代码提示
  • ¥15 能够跑通不报错,如何解决?(标签-matlab)
  • ¥15 MOS在RDS较大,频率高时开关波形异常
  • ¥15 SCENIC分析报错求解答