package demo2; public class A { int x=2; public void setx(int i) { x=i; } void printa() { System.out.println(x); } class B extends A{ int x=100; void printb() { super.x=super.x+10; System.out.println("super.x="+super.x+"x="+x); } } public static void main(String[] args) { A a1=new A(); a1.setx(4); a1.printa(); B b1=new B();/*主程序是静态,局部类是动态的,类中的静态方法不能直接调用动态方法 */ b1.printb(); b1.printa(); b1.setx(6); b1.printb(); b1.printa(); a1.printa(); } }这个代码哪里有问题
时间: 2024-01-15 09:02:35 浏览: 69
这个代码中有一个问题是在类B中的printb()方法中应该调用super.printa()方法而不是直接调用printa()方法,因为这样才能确保调用的是类A中的printa()方法,而不是类B中的printa()方法。另外,在类B中的x变量应该被声明为一个新的变量名,因为它隐藏了类A中的x变量。以下是修改后的代码:
```
package demo2;
public class A {
int x = 2;
public void setx(int i) {
x = i;
}
void printa() {
System.out.println(x);
}
class B extends A {
int y = 100;
void printb() {
super.x = super.x + 10;
System.out.println("super.x=" + super.x + " y=" + y);
super.printa();
}
}
public static void main(String[] args) {
A a1 = new A();
a1.setx(4);
a1.printa();
B b1 = a1.new B();
b1.printb();
b1.setx(6);
b1.printb();
b1.printa();
a1.printa();
}
}
```
阅读全文