当前位置: 技术问答>java相关
关于override 和 static 的一个问题??
来源: 互联网 发布时间:2017-04-02
本文导语: class MyTestSup { public void MyMethod1(){System.out.println("Method1 in Super");} public static void MyMethod2(){System.out.println("Mehtod2 in Super");} } class MyTestSub extends MyTestSup { public void MyMethod1(){System.out.println("Method1 in Sub");} publi...
class MyTestSup
{
public void MyMethod1(){System.out.println("Method1 in Super");}
public static void MyMethod2(){System.out.println("Mehtod2 in Super");}
}
class MyTestSub extends MyTestSup
{
public void MyMethod1(){System.out.println("Method1 in Sub");}
public static void MyMethod2(){System.out.println("Method2 in Sub");}
public static void main(String[] args)
{
MyTestSup mt = new MyTestSub();
mt.MyMethod1();
mt.MyMethod2();
System.out.println("Hello World!");
}
}
输出为:
Method1 in Sub
Mehtod2 in Super
Hello World!
--------------------
为什么mt.MyMethod2()输出Method2 in Super??
应该是和static 有关,请给个解释,谢谢!!
{
public void MyMethod1(){System.out.println("Method1 in Super");}
public static void MyMethod2(){System.out.println("Mehtod2 in Super");}
}
class MyTestSub extends MyTestSup
{
public void MyMethod1(){System.out.println("Method1 in Sub");}
public static void MyMethod2(){System.out.println("Method2 in Sub");}
public static void main(String[] args)
{
MyTestSup mt = new MyTestSub();
mt.MyMethod1();
mt.MyMethod2();
System.out.println("Hello World!");
}
}
输出为:
Method1 in Sub
Mehtod2 in Super
Hello World!
--------------------
为什么mt.MyMethod2()输出Method2 in Super??
应该是和static 有关,请给个解释,谢谢!!
|
static方法不能override的,它是class方法,不是instance方法。
非static方法是一个instance方法,可以override.
即使mt是具有超类数据类型,但它仍旧是一下子类实例。
static 方法是被hide,我们可通过qualified name (限定名,这里的转换变量mt)访问它。不同的是,被override的方法不能被override它的子类的外部访问,所以mt可调用子类的MyMethod1(),而不能调用超类的方法MyMethod1()
非static方法是一个instance方法,可以override.
即使mt是具有超类数据类型,但它仍旧是一下子类实例。
static 方法是被hide,我们可通过qualified name (限定名,这里的转换变量mt)访问它。不同的是,被override的方法不能被override它的子类的外部访问,所以mt可调用子类的MyMethod1(),而不能调用超类的方法MyMethod1()
|
向上cut时,声明为virtual的方法有子类特性
MyMethod2()声明为static则不具备缺省virtual特性,也就把子类方法cut掉了
MyMethod2()声明为static则不具备缺省virtual特性,也就把子类方法cut掉了
|
非static方法,运行时根据new产生的实际对象类型调用,
static方法,编译时根据对象引用的类型调用。
另外,我19号刚考的1。4,只有9道原题,希望你小心了,如果很多东西没彻底弄懂,还是等等罢
static方法,编译时根据对象引用的类型调用。
另外,我19号刚考的1。4,只有9道原题,希望你小心了,如果很多东西没彻底弄懂,还是等等罢
|
class MyTestSub extends MyTestSup
好像不对头吧,基类和子类竟然同名,程序里没问题!换个名称先!
好像不对头吧,基类和子类竟然同名,程序里没问题!换个名称先!
|
static能重写,private也能重写,只是没有虚拟特性
也就是说根据变量类型来决定执行哪个
java的方法默认是虚拟的,根据实体类型来决定执行哪个
也就是说根据变量类型来决定执行哪个
java的方法默认是虚拟的,根据实体类型来决定执行哪个
|
呵呵,不是虚拟就不是重写?这个我不太清楚
反正manzhi的意思跟我的一样,可能我的表达有点问题
反正manzhi的意思跟我的一样,可能我的表达有点问题
|
to: JackJia ()
请注意动态绑定,多态在造型时,多态只用于实例方法,而不用于类方法,也不用于fields上.所以就是你后面的结果
请注意动态绑定,多态在造型时,多态只用于实例方法,而不用于类方法,也不用于fields上.所以就是你后面的结果