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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qiucheng1990 中级黑马   /  2012-11-28 07:52  /  1491 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

求解为什么抽象方法不能用static和private修饰呢,求详解

4 个回复

倒序浏览
1.为什么不能用static修饰
   因为abstract的语义就是说这个方法是多态方法,需要在子类中实现。而static方法则是在本类中实现的,编译期绑定,不具有多态行为。

2为什么不能用private修饰
   
因为抽象方法必须被子类覆写,如果使用了private,则子类是无法覆写的

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
java中抽象类的方法可以不能用static来修饰,自由抽象类的属性可以。接口中的方法也不行,接口只是抽象类的一个特殊的。
抽象类中的抽象方法(其前有abstract修饰)不能用private、static、synchronized、native访问修饰符修饰。原因如下:抽象方法没有方法体,是用来被继承的,所以不能用private修饰;static修饰的方法可以通过类名来访问该方法(即该方法的方法体),抽象方法用static修饰没有意义;使用synchronized关键字是为该方法加一个锁。。而如果该关键字修饰的方法是static方法。则使用的锁就是class变量的锁。如果是修饰类方法。则用this变量锁。但是抽象类不能实例化对象,因为该方法不是在该抽象类中实现的。是在其子类实现的。所以。锁应该归其子类所有。所以。抽象方法也就不能用synchronized关键字修饰了;native,这个东西本身就和abstract冲突,他们都是方法的声明,只是一个吧方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
陈龙 发表于 2012-11-28 08:26
1.为什么不能用static修饰
   因为abstract的语义就是说这个方法是多态方法,需要在子类中实现。而static方 ...

我不解的是为什么楼主会想到用private去修饰子类要重写的方法
回复 使用道具 举报
你可以这样理解为什么抽象方法不能用static和private修饰
首先,你要明确什么是抽象方法,
抽象方法用大白话就是你想象的一个种类事物的大体轮廓。
其次,你要知道static和private是什么
static是静态的,private是私有的,
一个种类事物都有相同点和不同点,抽象方法是这个事物的相同点,而private、static是修饰不同点的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马