找出下段代码中的语法错误,说明原因,并改正 public class AbstractDemo { private int i = 0; public void func1(); public static void func2() { system.out.println("变量i的值为:"+i); } } class Sub extend AbstractDemo { public static func2() { System.out.println("变量i的值为:"+i);
时间: 2024-03-13 19:43:58 浏览: 19
该段代码中存在两个语法错误。
第一个语法错误:在 AbstractDemo 类中,方法 func1() 后面有一个分号,应该去掉分号。
第二个语法错误:在 Sub 类中,方法 func2() 的修饰符缺失了关键字“void”,应该改为“public static void func2()”。
另外,由于 i 是 AbstractDemo 类的私有成员变量,Sub 类不能直接访问,所以需要使用 super.i 来访问。
改正后的代码如下:
```
public class AbstractDemo {
private int i = 0;
public void func1() {
// 方法体
}
public static void func2() {
System.out.println("变量i的值为:" + super.i);
}
}
class Sub extends AbstractDemo {
public static void func2() {
System.out.println("变量i的值为:" + super.i);
}
}
```
相关问题
针对以下程序,哪个选项会出现编译错误 class A { public: virtual void Print( ) = 0 ; private: int a; };
这段程序定义了一个抽象基类 A,其中包含一个纯虚函数 Print() 和一个私有成员变量 a。由于 Print() 是纯虚函数,A 类是抽象类,不能被直接实例化。
在这段程序中,a 是私有成员变量,只能在类的内部访问,不能被外部访问。这个类的设计并没有问题,不会出现编译错误。
但是,如果在类的内部定义一个使用 a 的函数,而该函数是公有函数,那么编译器会报错,因为私有成员变量只能在类的内部访问,外部无法访问。例如:
```c++
class A {
public:
virtual void Print() = 0;
void Func() { a = 10; } // 编译错误,a 是私有的
private:
int a;
};
```
这样的话,编译器会提示“error: ‘int A::a’ is private within this context”。
class A { public: int a = 100; void func() {cout << "A 成员函数"} }; class B { public: int b = 200; void func() { cout << "B 成员函数" } }; A *a1; B b1; a1 = &b1; a1->func(); b1.func();
这段代码中存在一些语法错误,应该修改为以下代码:
```
#include <iostream>
using namespace std;
class A {
public:
int a = 100;
void func() { cout << "A 成员函数" << endl; }
};
class B {
public:
int b = 200;
void func() { cout << "B 成员函数" << endl; }
};
int main() {
A* a1;
B b1;
a1 = &b1;
a1->func();
b1.func();
return 0;
}
```
此时的输出结果应该为:
```
A 成员函数
B 成员函数
```
因为 `a1` 是一个指向 `A` 类型的指针,但是却指向了 `B` 类型的对象 `b1`。当调用 `a1->func()` 时,由于 `a1` 的静态类型是 `A*`,因此编译器会将 `a1->func()` 解释为调用 `A` 类型的 `func()` 函数,但是实际上 `a1` 指向的是 `B` 类型的对象 `b1`,因此会调用 `B` 类型的 `func()` 函数,输出字符串 `"B 成员函数"`。而当调用 `b1.func()` 时,直接调用 `B` 类型的 `func()` 函数,输出字符串 `"B 成员函数"`。