抽象类有一个变量和一个方法。一个类扩展抽象类,如下所示:
abstract class shape
{
int area;
void printArea(){System.out.println("Area = "+area);}
}
class circle extends shape
{
int r;
circle(int a){r = a;}
area=r*r;//line 22
}
public class Abstraction{
public static void main(String[] args) {
circle c=new circle(10);
c.printArea();
}
}
第22行给出了一个编译错误。但是如果这一行被移动到类的构造函数中,那么它就会编译
class circle extends shape
{
int r;
circle(int a){r = a;area=r*r;}
}
这是什么行为?
答案 0 :(得分:1)
area=r*r;//line 22
不在函数中,而是在类的主体中。
你不能在身体上发表声明。您可以将其包装在静态块中,也可以将其移动到方法中。但由于area是一个实例变量,因此您也无法将其置于静态块中。
当你移动一个方法时,它编译得很好,因为它属于它所在的位置。
答案 1 :(得分:0)
您无法在java类体中调用任何类型的表达式。只有参与赋值的表达式才能直接在java类体中获得。
但如果你真的想这样做,你可以做到以下几点。
class circle extends shape
{
int r;
circle(int a){r = a;}
{
area=r*r;//line 22
}
}
但是由于Java对象创建生命周期,这段代码无法按预期工作。
将会发生什么。
最后
r = a;
area = 0;