xieji233 2016-08-28 12:40 采纳率: 100%
浏览 2090
已采纳

为什么static不能实现多态呢?

假设:
class Parent{
public Parent(){};
//静态的方法:被测试能否覆写
public static test(){
System.out.println("Parent的静态方法");
}
}
class Child extends Parent{
public Child(){};
//静态的方法:测试能否覆写其父类的静态方法
public static test(){
System.out.println(" Child的静态方法");
}
}
我所知道的:
1.static方法在JVM类加载时便存在,先与对象存在于内存中
2.当Child对象创建时会先创建Parent对象(而此时父类中的test()方法已经存在了)
2.1 这时接着创建Child对象前,(test()方法已存在)

疑问:
1.是否static方法在类加载分配空间时,当出现了相同的方法名,或者属性名,就只存储先出现的,后面的就不进行存储了?
2.还是,都存储了,只是因为多态的关系,当父类调用test()时,只会去调用其类中的?

  • 写回答

9条回答 默认 最新

  • 春天画花卉校长 2016-08-28 14:24
    关注

    一,java中静态属性和静态方法可以被继承,但是没有被重写(overwrite)而是被隐藏.
      二,原因:
      1, 静态方法和属性是属于类的,调用的时候直接通过类名;方法名完成对,不需要继承机制即可以调用;
      (1)如果子类里面定义了静态方法和属性,则这时候父类的静态方法或属性称之为"隐藏";
      (2)如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成,至于是否继承,子类是有继承静态方法和属性,但是跟实例方法和属性不太一样,存在"隐藏"的这种情况。;
      2, 多态之所以能够实现依赖于继承、接口和重写、重载(继承和重写最为关键),有了继承和重写就可以实现父类的引用指向不同子类的对象;
      3,重写的功能是:"重写"后子类的优先级要高于父类的优先级,但是“隐藏”是没有这个优先级之分的。
      4, 静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写,因此不能实现多态,不能实现父类的引用可以指向不同子类的对象。
      5,非静态方法可以被继承和重写,因此可以实现多态。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?