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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑雪 中级黑马   /  2013-5-2 11:00  /  1893 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郑雪 于 2013-5-4 09:50 编辑

为什么抽象关键字abstract和private,static关键字不能共存?请大家帮忙详细解释一下。

评分

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

查看全部评分

8 个回复

倒序浏览
abstract方法是需要被子类复写的,private以后子类无法访问就无法复写了。
abstract方法没有方法体,static方法没有创建象时也可以使用,但没有方法体调用了也没意义了。
回复 使用道具 举报
abstract方法是子类应覆盖的方法,所以在抽象类中声明它时,不能使用private关键字,(private意味着抽象类的外部类无法访问,既然无法访问,覆盖也就无从谈起)
static方法在不创建对象时也可以调用,所以方法体(body)也应该被定义,若无方法体,也就是不能以”类名。方法名()”的形式对其调用,所以abstract方法(无方法体)不能被static关键字修饰

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
bstract修饰的方法是必须在其子类中实现(覆盖),才能调用,不经过重写是没有方法体的,没有用处
private修饰的方法是不能被子类看到的,也就是没法被继承到了,所以也就不能覆盖
static是可以被覆盖的,但是只能被静态方法覆盖。不过在调用时会调用编译时类型的方法,因为调用的是父类的方法,而父类的方法又是抽象的方法,又不能够调用,所以上的修饰符不能放在一起。
抽象方法在不同子类中可能会有不同实现,用static修饰后可以用类名直接调用方法,容易导致错误

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
抽象是用来继承和实现的,而private是限制继承的,static是静态的在程序加载的时候就运行了是最先运行的,如果抽象类被static修饰了,那他一开始就被加载了,还怎么被继承啊!
回复 使用道具 举报
abstract 方法不能被private,static所修饰
abstract方法是子类应覆盖的方法,所以在抽象类中声明它时,不能使用private关键字,(private意味着抽象类的外部类无法访问,既然无法访问,覆盖也就无从谈起)
static方法在不创建对象时也可以调用,所以方法体(body)也应该被定义,若无方法体,也就是不能以”类名。方法名()”的形式对其调用,所以abstract方法(无方法体)不能被static关键字修饰
java接口中,所有方法都是抽象的,所有变量也都是static常量,接口本身就是一种约束
package com.liufofu.intf;
/**
* 测试接口
* */
public interface MyInter {
public static final int MAX = 100;
public static final int MIN = 1;
public abstract void method1();
public abstract void method2(int a);
}
接口的所有变量都是static和final的,接口的所有方法都是抽象方法,所以实现此接口的类只有全部覆盖了接口的全部抽象方法,才能创建对象。我们把继承接口叫做实现接口,使用关键字implements.继承抽象类的关键词是extends,和抽象类相比,接口更具有抽象性,实现接口意味着实现接口的类会继承接口的所有成员。
在类的继承中,只能做单重继承,而实现接口时,一次可实现多个接口,这些接口间用逗号分隔。

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

回复 使用道具 举报
要弄明白这个问题你应该首先了解抽象类是用来做什么的,抽象类本身就用来继承和重写的
而private是限制继承的,static是静态的在程序加载的时候就运行了是最先运行的,如果抽象类被static修饰了,那他一开始就被加载了,还怎么被继承。
回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马