gpt4 book ai didi

java - 在抽象类中有 main 方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:10:28 25 4
gpt4 key购买 nike

我知道在抽象类中使用 main 方法是合法的,因为 Eclipse 允许我执行以下操作并将该类作为 Java 应用程序运行。但是这样做有意义吗?

现实世界中是否存在需要在抽象类中使用 main 方法的场景?

public abstract class Automobile
{
public Boolean powerOn()
{
// generic implementation for powering on an automobile
return true;
}


public void move()
{
// generic implementation for move
}

public void changeDirection(String newDir)
{
// generic implementation for changing direction
}

public abstract void accelerate(Integer changeInSpeed);
public abstract Integer refuel(Integer inputFuel);

public static void main(String[] args)
{
System.out.println("I am a main method inside an abstract Automobile class");
}
}

最佳答案

不,不是真的。尝试创建一个类层次结构,其中不同的类共享相同的 main 方法似乎没有用。看这个例子:

public abstract class A {

public static void doStuff() {
System.out.println("A");
}

public static void main(String[] args) {
System.out.println("starting main in A");
doStuff();
}
}

class B extends A {
public static void doStuff() {
System.out.println("B");
}
}

打印出来

c:\Users\ndh>java A
starting main in A
A

这是意料之中的,但很无聊,而且

c:\Users\ndh>java B
starting main in A
A

这不是你想要的。

隐藏静态方法调用不像实例方法的虚拟覆盖那样工作,您必须首先显式命名类以用作找到正确方法签名的起点(或者默认情况下,您将获得调用所在的类制作)。问题在于 main 方法无法了解子类(或者将它放在抽象类上有什么意义),因此没有好的方法可以将特定于子类的信息获取到父类(super class) main 方法中。

我的偏好是尽量减少对 static 关键字的使用,将其保留给常量(尽管自从枚举出现后就没有那么多了)和没有依赖关系的无状态函数。取而代之的是面向对象的技术。对于静态方法,您必须具体。使用 OO 的想法是您可以避免具体化,让子类自行处理。

关于java - 在抽象类中有 main 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31593307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com