public class Test
{ public static void main(String args[])
{ Test t=new Test();
System.out.println(t instanceof Test);
System.out.println("测试一下");
}}
class Temp extends Test
{}
//请问一下我把这个Test.java文件编译好了之后.生成了Test.class,Temp.class
//两个文件我用javac Test,输出"true,测试一下"属于正常.但是我又用javac Temp
//也输出了同样的结果.为什么呢.难道public static void main(String args[])
//被Temp继承了吗?
{ public static void main(String args[])
{ Test t=new Test();
System.out.println(t instanceof Test);
System.out.println("测试一下");
}}
class Temp extends Test
{}
//请问一下我把这个Test.java文件编译好了之后.生成了Test.class,Temp.class
//两个文件我用javac Test,输出"true,测试一下"属于正常.但是我又用javac Temp
//也输出了同样的结果.为什么呢.难道public static void main(String args[])
//被Temp继承了吗?
但是如果在Test类中有一个qq()函数和一个入口main函数的话
那么在qq()中可以执行this.变量名,而在main()中却不可以执行this.变量名,
public class Test()
{
int num=100;
qq()
{
this.num=300;//可以用this访问变量;
}
public static void main(String args[])
{
this.num=400;//不可以用this访问变量;
}
}
遇到这种继承的问题 楼主只有记住:子类继承父类的所有方法 除了构造方法
楼上说法有误,您说:"总之,main方法和类的其他方法没有什么区别,只不过虚拟机默认main为代码执行入口而已。"
但是如果在Test类中有一个qq()函数和一个入口main函数的话
那么在qq()中可以执行this.变量名,而在main()中却不可以执行this.变量名,
如:
public class Test()
{
int num=100;
qq()
{
this.num=300;//可以用this访问变量;
}
public static void main(String args[])
{
this.num=400;//不可以用this访问变量;
}
}
-----------------------------------------------------因为main 是static的阿~静态方法只能调用静态的方法和变量。
与本案无关~
而且,由它的修饰符可以知道,它是个类的静态方法
调用可以按照正常的调用方式调用
其他的和楼上的差不多了,main方法只是一个特殊的入口而已,和别的方法没有什么区别
lz确定你的程序能跑?
没有说找不到入口?
-------------------------------------------------------
我同意这位的观点。
我无法运行楼主的那个程序~~~
如果在elipse中,在同一个文件下写两个类,点击运行,就会出现一个对话框,不能顺利运行
首先肯定 含有main()的类可以被继承但是 你的程序虽然在DOs下运行成功
但那并不是继承因为java虚拟机会根据你的程序寻找到main()
所以运行成功了具体的我讲不太明白
但是我在一本书中看到过你个问题
虽然可以被继承 但是这个例子并不是继承的体现
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("hello");
}}
import java.lang.reflect.Method;
public class TestClassB extends TestClassA{ /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Method[] methods=TestClassB.class.getMethods();
for(int i=0;i<methods.length;i++)
{
System.out.println(methods[i]);
}
}}
看结果好像TestClassB里面没有TestClassA的main方法.关注
其次,static方法是可以继承的,换句话说,一个方法能否被子类继承根本与static无关。static方法只是不能被覆盖。至于jobs002(Oh! Office) 发的代码说明的问题,我目前没有搞清楚,因为Class类的getMethods()方法的源代码写得很简单,源代码后来调用 s.checkMemberAccess(this, Member.PUBLIC)我就不懂了~不知道是否与此有关。但值得一提的是,你在TestClassB中已经重新定义了mainI()方法,如果两个main可以存在于同一个类中,那jvm怎么知道该从哪个main进入呢?所以我才jvm可能有某种机制保证main方法的唯一性。或者干脆像变量一样,类似于被“屏蔽”了(因为static方法不能被覆盖阿~)。这部分有待学习~~~
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
public java.lang.String java.lang.Object.toString()第一个就是main()方法,怎么会没有呢?我还是认为main()没有任何特殊的地方。
a.x();实际上调用的是A.x(),因为static是类的方法,所以只考虑编译时类型信息而不是运行时类型信息。换言之,这种写法其实不太好,最好直接用A.x()调用,这样更容易阅读而不容易被误解。综上所述,static方法是跟类相关而不是实例,可以被继承,子类可以“重载”static方法,但是由于只考虑编译时信息而不是运行时信息,所以不能够被用于多态。
import java.lang.reflect.Method;
public class TestClassB extends TestClassA{/**
* @param args
*/}
其他的代码不变,大家可以看看有什么结果,大家可以讨论一下原因,继续关注.
注:只运行TestClassB.
{public static void main(String args[])
{Test t=new Test();
System.out.println(t instanceof Test);
System.out.println("测试一下");
}}
public class Temp extends Test
{}
修改成这样就可以正确运行