A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 伊廷文 中级黑马   /  2013-4-19 19:09  /  1789 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

4 个回复

倒序浏览
都不可以,因为abstract申明的方法是要求子类去实现的,abstract只是告诉你有这样一个接口,你要去实现,至于你的具体实现可以是native和synchronized,也可以不是,抽象方法是不关心这些事的,所以写这两个是没有意义的。然后,static方法是不会被覆盖的,而abstract方法正是要子类去覆盖它,所以也是没有意义的。所以,总的来说,就是java语法不允许你这样做,事实上,也没有意义这样做。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
我现在的水平只知道abstract修饰的抽象方法不能用static修饰,因为被static修饰的方法可以直接通过类名调用,但abstract修饰的方法不被复写是没有实际方法体的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 先小涛 于 2013-4-20 10:24 编辑

抽象类中的抽象方法只是定义功能,比如人要吃饭,但是不同的人吃饭的方式不同,所以事先无法具体实现功能。那么这时可以只定义方法,让具体的子类去实现。比如婴儿需要喂着吃
  1. abstract class Person{
  2.     public abstract void chiFan();//只是定义功能,具体由子类实现
  3. }
  4. class Baby extends Person{
  5.     public void chiFan(){
  6.         System.out.println("喂着吃");
  7.     }
  8. }
复制代码
而java语法规定被static修饰的方法是不能被继承的,而抽象方法必须要求子类实现的,由此可见static与abstract是矛盾的,故不能同时修饰方法。
还有static意思是静态的,而非动态的,随着类走的,相当于类的成员变量,类的属性共性,不是随意变化的。
而非静态方法是随着对象走的,可变化的,多态的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报

如果问题未解决,请继续追问,如果问题解决了,请将问题分类改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马