作者:巴萨小Q | 来源:互联网 | 2023-05-17 12:27
印旻的《Java语言与面向对象程序设计》中p85页说“abstract类中不能有private的成员(包括属性和方法)”,可是我上机操作,却可以正常编译通过,到底abstract类中可以包含priva
印旻的《Java语言与面向对象程序设计》中p85页说“abstract类中不能有private的成员(包括属性和方法)”,可是我上机操作,却可以正常编译通过,到底abstract类中可以包含private成员吗?
abstract class Point {
private int x = 1, y = 1;
void move(int dx, int dy) {
x += dx;
y += dy;
alert();
}
abstract void alert();
}
abstract class ColoredPoint extends Point {
private int color;
}
class SimplePoint extends Point {
void alert() { }
}
7 个解决方案
可以。
java类中,只要有一个方法是不完整的类就是抽象类。
我在作抽象类(一般作基类)的时候,一直这莫用。
可能是翻译的错误吧。
不过抽象类中的属性最好还是用protected的好,这样在子类实现抽象方法的时候
就可以使用到这些属性,当然了,在某些特殊要求下,一定要禁止子类使用抽象类中的属性的
情况除外。
抽象类不能直接实例化,只能继承
private 成员无法被继承
所以抽象类的 private 成员无意义
既不能被抽象类自己使用,也不能被子类使用
在抽象类的实现了的方法中如果有必要用到private 属性的成员,如:两个方法间共享一个属性做程序流程控制(也许不太符合软工的低耦合要求,但有时是最简便的),这个属性不希望在子类其它方法中改变.