【发布时间】:2014-05-15 15:05:16
【问题描述】:
我是 Java 新手。
我知道,即使是子类也不能直接引用基类的非静态成员。 喜欢,
class BaseClass
{
int id;
public void testMethod()
{
System.out.println("Hello");
}
}
public class Test1 extends BaseClass
{
public static void main(String[] args)
{
System.out.println("ID : " + id);
}
}
这会给我们一个错误“无法对非静态字段 id 进行静态引用”
但是,在抽象类的情况下,我们可以做到。
abstract class MyAbstractClass
{
int id;
public void setId(int id)
{
this.id = id;
}
}
public class SubClass extends MyAbstractClass
{
public void testMethod()
{
System.out.println("ID Value : " + id);
}
public static void main(String[] args)
{
SubClass obj = new SubClass();
obj.setId(1);
obj.testMethod();
}
}
我想知道在抽象类的情况下如何以及为什么可能。 感谢您的回答。 请温柔,我是java的新手。 :)
【问题讨论】:
-
这是不可编译的代码。类定义中不能直接调用方法,应该在方法中调用。
-
@JeroenVannevel 是的,
syso是代码更改。如果你要编辑,只做缩进。 -
syso是 Eclipse 中的一个快捷方式,我发现仅仅为此而恢复我的编辑是不合理的。如果你这样做了,那么我建议你接受我的编辑并将其放回原处,但至少保持其他更改不变。 -
你的例子是完全错误的。如果您尝试从静态上下文访问实例变量,您只会收到您所说的错误。因此,您的子类或子类中的方法必须是静态的才能收到此错误。
-
好的,现在您已经向我们展示了一个完整的示例:这与
abstract无关。在第一个示例中,您从静态方法中引用id,而在第二个示例中,您没有。
标签: java abstract-class abstraction