为什么我不能在类块中调用实例变量的方法?
问题描述:
考虑以下类为什么我不能在类块中调用实例变量的方法?
public class Player {
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
假设有另一个类在同一包
public class Sample {
Player p1 = new Player();
Player p2 = new Player();
Player p3 = new Player();
Player p4 = new Player();
//p1.
}
在这种类访问方法p1.setId(INT)是不可能的,除非它被称为在侧另一种方法
public class Sample {
Player p1 = new Player();
Player p2 = new Player();
Player p3 = new Player();
Player p4 = new Player();
void example() {
int x;
p1.setId(x);
}
}
内部示例p1.setId()是可能的。据我所知,Java是 只能在另一种方法内访问方法。所以它的更多 安全。但我想澄清,为什么这样的限制是 那里以及什么概念数据抽象或封装显示 这个限制。提前致谢 。
答
据我所知,Java是仅使内的另一种方法的方法的访问。所以它更安全
这是完全废话。
你只需具有与该语言的语法规则,这不能不说类体中,you can have only these four things:
ClassMemberDeclaration
InstanceInitializer
StaticInitializer
ConstructorDeclaration
你不能把随便什么代码类内部的问题,这只是不是如何类被定义。你可以使用实例初始值设定项。这工作:
public class Sample()
{
Player p1 = new Player();
Player p2 = new Player();
Player p3 = new Player();
Player p4 = new Player();
{
p1.setInt(2);
}
}
但它通常不做,因为构造函数更适合实例初始化。
答
因为您尝试在类块中执行操作,应在其中定义方法和变量。
如果你真的想设置这个属性使用块。
public class Sample() {
Player p1 = new Player();
{
p1.setId(1);
}
}
我认为更好的情况下使用一些将从构造函数调用的初始化方法。
public class Sample() {
Player p1 = new Player();
public Sample() {
init();
}
private init(){
p1.setId(1);
}
}
答
我认为你的代码可能存在另一个错误:为什么在类名“Sample”后面使用圆括号?
答
-在类的范围内,你不能那样进行操作,在类范围
-要么它必须是inside a method
或inside a block
。
如:
public void go(){ // Inside a method
p1.setIt(1);
}
如:
{ // Inside a block
p1.setIt(1);
}
是'Sample'应该是一个类? – verdesmarald 2012-07-30 07:31:09
是的..我编辑了 – Meenakshi 2012-07-30 07:32:29
您可以请删除空行并正确缩进您的代码。 – Keppil 2012-07-30 07:32:29