2011-05-08 180 views
0

我想知道为什么我的子类没有正确继承。继承方法不工作从父类

如果我有...

public class ArithmeticOp{ 

    //some constructor 

    public static void printMessage(){ 
     System.out.println("hello"); 
    } 

} 

和其他类

public class AddOp extends ArithmeticOp{ 

    //some constructor 

    ArithmeticOp op = new ArithmeticOp(); 
    op.printMessage();   //returns error 
} 

我的日食持续返回 “语法错误令牌 ”printMessage“,标识预计令牌之后”

有人可以帮忙吗?谢谢!有没有其他方法可以从父类调用方法以及从子类调用?谢谢一堆!

+0

您的代码片段是否准确?我以为你会做ArithmeticOp op = new AddOp();无论哪种方式静态方法总是属于类,而不是对象。所以继承不会与静态工作。我想你想放弃static关键字并使用OOP。在调用静态方法时,总是需要调用Class, ArithmeticOp.printMessage(),不在实例上调用,例如op.printMessage(); – planetjones 2011-05-08 13:58:04

回答

3

这是因为你不能把任意代码到类体:

public class AddOp extends ArithmeticOp{ 

    ArithmeticOp op = new ArithmeticOp(); // this is OK, it's a field declaration 
    op.printMessage();     // this is not OK, it's a statement 
} 

op.printMessage();需要是一个方法的内部,或内部的初始化块。

那边,你的代码感觉不对。为什么你想要在里面实例化一个ArithmeticOp它自己的子类之一?

+0

哦,它比我想象的更基础。 + 1用于完全读取编译器错误! – planetjones 2011-05-08 14:00:05

+0

@planetjones:我也看不到它,我不得不启动Eclipse来发现它:) – skaffman 2011-05-08 14:01:25

+0

我明白了!谢谢一堆! – Sasha 2011-05-08 23:13:45

0

这是因为该方法被声明为静态。我可能是误会,我敢肯定,如果我会有人发表评论,但我认为你可以这样做:

public class AddOp extends ArithmeticOp{ 

    //some constructor 

    ArithmeticOp op = new ArithmeticOp(); 
    super.printMessage();   //super should call the static method on the parent class 
} 

或者

public class AddOp extends ArithmeticOp{ 

    //some constructor 

    ArithmeticOp op = new ArithmeticOp(); 
    ArithmeticOp.printMessage();   //Use the base class name 
} 
+0

-1没有,仍然不能编译(见其他答案)。 – skaffman 2011-05-08 13:59:32

+0

感谢您的帮助!它只是需要在一个函数内部也可以调用该语句 – Sasha 2011-05-08 23:14:15