Java J2SE问题,构造函数自动运行?

Java J2SE问题,构造函数自动运行?,java,Java,我写了几年C,开始学习java, 今天我看到一个样本很奇怪,这在C中是不可能发生的。 从…起 构造函数将在main上启动,参数-g没有初始化任何东西,这是java上的一个隐藏特性,但在OOP上是不合法的吗?这里什么是非法的?您正在扩展JFrame,并且只重写方法paint方法,而不是构造函数。其余的都是遗传的行为 如果您检查JFrame及其祖先的源代码,您将看到在某个时候对setVisibile的调用将调用paint。并提供了正确的图形对象 其行为与此小示例中的相同。它将在命令行上输出条。这是

我写了几年C,开始学习java, 今天我看到一个样本很奇怪,这在C中是不可能发生的。 从…起


构造函数将在main上启动,参数-g没有初始化任何东西,这是java上的一个隐藏特性,但在OOP上是不合法的吗?

这里什么是非法的?您正在扩展JFrame,并且只重写方法paint方法,而不是构造函数。其余的都是遗传的行为

如果您检查JFrame及其祖先的源代码,您将看到在某个时候对setVisibile的调用将调用paint。并提供了正确的图形对象

其行为与此小示例中的相同。它将在命令行上输出条。这是有道理的。您可以重写在Bar中继承的Foo构造函数中调用的runMe方法,因为您不使用/提供自己的方法来重写它

public class Test {
    public static void main(String args[]) {
        new Bar();
    }
}

public class Foo {
    public Foo() { runMe(); }
    public void runMe() { System.out.println("Foo"); }
}

public class Bar extends Foo {
    public void runMe() { System.out.println("Bar");}
}

你需要看看这条线

public class MainClass extends JFrame
JFrame类提供了很多额外的功能,包括图形上下文的设置


请注意,paint不是构造函数,它是类的一个方法,调用它是因为将框架设置为可见。

paint不是构造函数。paint是一种方法,当Swing需要绘制已创建的框架时,它将调用该方法


尝试阅读a和Javadocs for.

谢谢您的回答,我从来没有想到它是override,因为在C世界中,它需要通过overrides关键字来声明。当我在java文档中搜索后,我知道java可以跳过关键字。谢谢你的帮助,但是最好在@Override中添加它,这样当你认为你覆盖了某些内容但实际上没有覆盖时,编译器会警告你
public class MainClass extends JFrame