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