当前位置:  技术问答>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 有关,请给个解释,谢谢!!


|
static方法不能override的,它是class方法,不是instance方法。
非static方法是一个instance方法,可以override.
即使mt是具有超类数据类型,但它仍旧是一下子类实例。
static 方法是被hide,我们可通过qualified name (限定名,这里的转换变量mt)访问它。不同的是,被override的方法不能被override它的子类的外部访问,所以mt可调用子类的MyMethod1(),而不能调用超类的方法MyMethod1()


|
向上cut时,声明为virtual的方法有子类特性
MyMethod2()声明为static则不具备缺省virtual特性,也就把子类方法cut掉了

|
非static方法,运行时根据new产生的实际对象类型调用,
static方法,编译时根据对象引用的类型调用。
另外,我19号刚考的1。4,只有9道原题,希望你小心了,如果很多东西没彻底弄懂,还是等等罢

|
class MyTestSub extends MyTestSup
好像不对头吧,基类和子类竟然同名,程序里没问题!换个名称先!

|
static能重写,private也能重写,只是没有虚拟特性
也就是说根据变量类型来决定执行哪个

java的方法默认是虚拟的,根据实体类型来决定执行哪个

|
呵呵,不是虚拟就不是重写?这个我不太清楚
反正manzhi的意思跟我的一样,可能我的表达有点问题

|
to: JackJia ()  
请注意动态绑定,多态在造型时,多态只用于实例方法,而不用于类方法,也不用于fields上.所以就是你后面的结果

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.lang.model.util接口elements的类成员方法: overrides定义及介绍
  • method overriding 的意思我明白,但在中文里应该翻译成什么为好?
  • uses or overrides a deprected api是什么意思呀
  • jdk Note: testsqlserver.java uses or overrides a deprecated API.
  • android @override 报错解决方案
  • 谁能告诉我OVERLOAD和OVERRIDE的中文释义和具体上的区别?
  • c#(asp.net) new与override的区别
  • 咨询以下:Thinking in java里,覆写(overriding)和重载(overloading)到底有什么区别?!
  • C++中overload,override,overwrite的区别详细解析
  • 解析abstract与override究竟可不可以同时使用
  • 重写、隐藏基类(new, override)的方法
  • Java overload和override的区别分析
  • C++中Overload,Override,Hide之间的区别


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3