抽象类有一个变量和一个方法,类对抽象类的扩展如下:
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行给出了一个编译error.But,如果这一行被移到它编译的类的构造函数中
class circle extends shape
{
int r;
circle(int a){r = a;area=r*r;}
}这种行为是什么?
发布于 2015-07-19 10:30:53
area=r*r;//line 22不是在函数中,而是在类的主体中。
你不能在身体里有这样的陈述。您可以将其封装在静态块中,也可以将其移动到方法中。但是,由于area是一个实例变量,所以您也不能在静态块中使用它。
当您移动一个方法时,它编译得很好,因为它属于它的位置。
仔细看看java类的结构。
发布于 2015-07-19 10:47:02
您不能在java类主体中调用任何类型的表达式。只有参与赋值的表达式才能直接在java类主体中获得。
但如果你真的想那样做,你可以做以下几件事。
class circle extends shape
{
int r;
circle(int a){r = a;}
{
area=r*r;//line 22
}
}但是,由于Java对象创建生命周期的存在,这段代码不会像您预期的那样工作。
会发生的是。
所以最后
r = a;
area = 0;https://stackoverflow.com/questions/31500198
复制相似问题