黑马程序员技术交流社区

标题: 抽象关键字abstract的问题 [打印本页]

作者: 郑雪    时间: 2013-5-2 11:00
标题: 抽象关键字abstract的问题
本帖最后由 郑雪 于 2013-5-4 09:50 编辑

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

作者: 吴传淦    时间: 2013-5-2 11:05
abstract方法是需要被子类复写的,private以后子类无法访问就无法复写了。
abstract方法没有方法体,static方法没有创建象时也可以使用,但没有方法体调用了也没意义了。
作者: wudongzhe    时间: 2013-5-2 11:07
abstract方法是子类应覆盖的方法,所以在抽象类中声明它时,不能使用private关键字,(private意味着抽象类的外部类无法访问,既然无法访问,覆盖也就无从谈起)
static方法在不创建对象时也可以调用,所以方法体(body)也应该被定义,若无方法体,也就是不能以”类名。方法名()”的形式对其调用,所以abstract方法(无方法体)不能被static关键字修饰
作者: 邹晓慧    时间: 2013-5-2 11:09
bstract修饰的方法是必须在其子类中实现(覆盖),才能调用,不经过重写是没有方法体的,没有用处
private修饰的方法是不能被子类看到的,也就是没法被继承到了,所以也就不能覆盖
static是可以被覆盖的,但是只能被静态方法覆盖。不过在调用时会调用编译时类型的方法,因为调用的是父类的方法,而父类的方法又是抽象的方法,又不能够调用,所以上的修饰符不能放在一起。
抽象方法在不同子类中可能会有不同实现,用static修饰后可以用类名直接调用方法,容易导致错误
作者: harborbest    时间: 2013-5-2 11:10
抽象是用来继承和实现的,而private是限制继承的,static是静态的在程序加载的时候就运行了是最先运行的,如果抽象类被static修饰了,那他一开始就被加载了,还怎么被继承啊!
作者: 海不扬波    时间: 2013-5-2 11:13
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,和抽象类相比,接口更具有抽象性,实现接口意味着实现接口的类会继承接口的所有成员。
在类的继承中,只能做单重继承,而实现接口时,一次可实现多个接口,这些接口间用逗号分隔。

作者: 花开花落总相似    时间: 2013-5-2 11:31
要弄明白这个问题你应该首先了解抽象类是用来做什么的,抽象类本身就用来继承和重写的
而private是限制继承的,static是静态的在程序加载的时候就运行了是最先运行的,如果抽象类被static修饰了,那他一开始就被加载了,还怎么被继承。
作者: 黄玉昆    时间: 2013-5-3 22:37
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2