从Java调用继承的类方法

从Java调用继承的类方法,java,python,inheritance,class-method,Java,Python,Inheritance,Class Method,在Python中,类方法可以被继承。e、 g >>> class A: ... @classmethod ... def main(cls): ... return cls() ... >>> class B(A): pass ... >>> b=B.main() >>> b <__main__.B instance at 0x00A6FA58> 我想调用B.main()并让它打印“B”,但显然它会打印

在Python中,类方法可以被继承。e、 g

>>> class A:
...  @classmethod
...  def main(cls):
...   return cls()
...
>>> class B(A): pass
...
>>> b=B.main()
>>> b
<__main__.B instance at 0x00A6FA58>
我想调用B.main()并让它打印“B”,但显然它会打印“A”,因为“newa()”是硬编码的


如何更改“new A()”,使其参数化,以便在调用时使用它所在的类,而不是硬编码的类A?

我认为这是不可能的。原因如下:

在Java中,方法的实现由实例的运行时类型决定。因此,要执行
B.show()
,需要有
B
的实例。如果构造实例的方法应该是继承的,那么我能看到的唯一方法就是使用
Class.newInstance()
构造运行时未知类型的实例

问题是,在静态方法中,没有对包含类的引用,因此不知道要调用谁的
newInstance
方法


但你为什么要这么做?可能有更好的方法来实现您想要实现的任何目标。

在您的示例中,我不会将您的主要方法放在A中。这是设置为系统的入口点(如果您专门输入A,则无法进入B)

在下面的示例中,我创建了类A、B和C。类C实例化A和B并运行它们。请注意,在C中,我创建了一个A、一个B和另一个A,并将其实例化为A B。我的输出是: A. B B

希望这是有道理的

public class A { 
public void show(){ 
    System.out.println("A"); 
  } 

public void run(){ 
    show(); 
  }  
} 

public class B extends A { 
 @Override 
 public void show(){ 
    System.out.println("B"); 
    } 
 } 

public class C {
public static void main(String[] args) {
    A a = new A();
    B b = new B();
    A anothera = new B();

    a.show();
    b.show();
    anothera.show();
   }
}

您的类
B
没有
main
方法,静态方法没有继承。

我看到这种情况的唯一方法是找到调用
a.main(String[]arg)
的对象,并将其改为调用
B.main

B.main:

   public static void main( String[] arg ) {
        new B().run();
    }

你的计划是如何开始的?是否有批处理文件、快捷方式等?你能改变什么?
A.main
在哪里被调用?

java中的静态方法不是
classmethod
s,而是
staticmethod
s。一般来说,不可能知道静态方法是从哪个类引用调用的。

B
确实有一个
main
;从
A
继承的方法。请注意,静态方法不是真正继承的。这就是我正在做的,通过给类B赋予它自己的main()。我只是希望它能从A继承main(),因为它们是相同的,而不是用于实例化的类。
   public static void main( String[] arg ) {
        new B().run();
    }