Java 从父类继承不起作用的方法

Java 从父类继承不起作用的方法,java,inheritance,static-methods,method-call,Java,Inheritance,Static Methods,Method Call,我想知道为什么我的子类不能正确继承 如果我有 public class ArithmeticOp{ //some constructor public static void printMessage(){ System.out.println("hello"); } } 还有一节课 public class AddOp extends ArithmeticOp{ //some constructor ArithmeticOp

我想知道为什么我的子类不能正确继承

如果我有

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
}
my eclipse不断返回“令牌“printMessage”上的语法错误,该令牌后面应该是标识符”


有人能帮忙吗?谢谢还有其他方法可以从父类以及子类调用方法吗?非常感谢

这是因为该方法被声明为静态的。我可能错了,如果我错了,我相信会有人评论,但我认为你可以做到:

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();
    super.printMessage();           //super should call the static method on the parent class
}


这是因为您不能将任意代码放入类主体中:

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()需要位于方法内部或初始值设定项块内部


除此之外,您的代码感觉是错误的。为什么要在自己的子类中实例化一个
算术运算

这是因为您不能将任意代码放入类主体中:

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()需要位于方法内部或初始值设定项块内部


除此之外,您的代码感觉是错误的。为什么要在自己的子类中实例化一个
算术运算

你的代码片段准确吗?我以为你会做算术运算op=newaddop();无论哪种方式,静态方法总是属于类,而不是对象。因此,继承不适用于静态。我认为您应该删除static关键字并使用OOP。调用静态方法时,通常最好总是调用类,例如ArithmeticOp.printMessage(),而不是调用实例,例如op.printMessage();你的代码片段准确吗?我以为你会做算术运算op=newaddop();无论哪种方式,静态方法总是属于类,而不是对象。因此,继承不适用于静态。我认为您应该删除static关键字并使用OOP。调用静态方法时,通常最好总是调用类,例如ArithmeticOp.printMessage(),而不是调用实例,例如op.printMessage();哦,这比我想象的更基本1用于完全读取编译器错误@琼斯:我也看不到它,我必须点燃日食来发现它:)哦,这比我想象的更基本1用于完全读取编译器错误@琼斯:我也看不到它,我不得不点燃月食来发现它:)不过谢谢你的帮助!它只需要位于函数内部,也可以调用该语句。谢谢您的帮助!它只需要位于函数内部,也可以调用该语句