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 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥66 如何制作支付宝扫码跳转到发红包界面
  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题