>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 30081 个阅读者 刷新本主题
 * 贴子主题:  请教:为什么static和abstract修饰符不能在一起使用? 回复文章 点赞(0)  收藏  
作者:Mike    发表时间:2017-06-24 16:43:50     消息  查看  搜索  好友  邮件  复制  引用

为什么一个成员方法不能同时用static和abstract修饰符一起来修饰呢?也就是说,为什么不允许有静态抽象方法,而只有实例方法才可以是静态的呢?


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->Java常用类(下)
  JavaWeb开发-->JSP技术详解(Ⅰ)
  JSP与Hibernate开发-->数据库事务的并发问题的解决方案
  Java网络编程-->Java网络编程入门
  精通Spring-->通过Axios访问服务器
  Vue3开发-->Vue组件开发高级技术
  [原创]汽車美容
  Java Proxy用法: 让我们创建一个API代理器
  好消息:《精通JPA与Hibernate:Java对象持久化技术详解》出...
  java.util.logging.Logger使用详解
  Java是如何实现自己的SPI机制的?
  使用 RocketMQ 事务消息,实现分布事务
  Java并发之volatile关键字内存可见性问题
  java NIO示例以及流程详解
  JNI_Java Native Interface的用法
  Java设计模式:装饰器模式
  Java入门实用代码: List 列表中元素的替换
  Java入门实用代码:集合转数组
  Java入门实用代码:数组转集合
  Java入门实用代码:自定义异常
  Java入门实用代码:字符串替换
  更多...
 IPIP: 已设置保密
楼主      
该用户目前不在线 sunweiqin 
  

威望: 0
级别: 高级天王 [荣誉]
魅力: 480
经验: 480
现金: 1128
发文章数: 171
注册时间: 2016-09-12
 消息  查看  搜索  好友  邮件  复制  引用


可以用反证法来推导。假定允许成员方法同时用static和abstract修饰符一起来修饰。
下面的Sample类有一个抽象的静态方法m1()和实例方法m2(),Sub子类实现了这两个方法:

public abstract class Sample{
  public static abstract void m1();
  public abstract void m2();
}

public class Sub extends Sample{
  public static void m1(){...}
  public void m2(){...}
}

下面这段代码分别调用m1()和m2()方法:

Sample s=new Sub();
s.m1();
s.m2();

以上s.m2()方法是实例方法,按照JVM动态绑定机制,和Sub实例的m2()方法绑定,因此可以被执行。
以上s.m1()方法是静态方法,按照JVM静态绑定机制,和Sample类的m1()方法绑定,而Sample类的m1()方法是抽象方法,无法被执行。

综上所述,如果静态方法被声明为抽象的,这将和Java虚拟机的绑定机制相矛盾,因此不允许static和abstract修饰符连用。
发文章时间 2017-06-24 17:00:10
 IPIP: 已设置保密 1 楼     
该用户目前不在线 Java菜鸟 
  
威望: 0
级别: 新手上路
魅力: 133
经验: 133
现金: 1054
发文章数: 6
注册时间: 2017-06-23
 消息  查看  搜索  好友  邮件  复制  引用


学习了,有些开窍。谢谢
发文章时间 2017-06-25 11:23:28
 IPIP: 已设置保密 2 楼     
1页 2条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。