Java中能否创建抽象属性?代码合法性及抽象类属性定义问询
你的Java抽象类代码合法性分析
这段代码完全合法,可以正常编译运行。
关于抽象类定义属性的问题
抽象类不仅能包含抽象方法和普通方法,还完全支持定义属性——不管是静态属性还是实例属性,这是抽象类的常规用法。你代码里定义的private static花色字符串,属于抽象类的静态成员,语法上没有任何问题。
代码细节优化建议
虽然代码合法,但有几个细节可以调整,让它更适配继承场景的需求:
- 你的花色属性是
private的,子类无法直接访问。如果子类需要使用这些常量,建议把访问修饰符改成protected,或者加上public final把它们定义成公开常量,也可以提供静态getter方法。 - 抽象方法
shuffle()没有指定访问修饰符,默认是包访问权限。如果希望子类能自由重写它,通常会用public或protected修饰(private方法无法被重写)。
优化后的示例代码:
public abstract class CardsDecks { // 定义为protected的静态常量,子类可直接访问 protected static final String HEARTS = "HEARTS"; protected static final String CLUBS = "CLUBS"; protected static final String DIAMONDS = "DIAMOND"; protected static final String SPADES = "SPADES"; // 用public修饰抽象方法,确保子类能重写 public abstract String shuffle(); }
子类继承的示例:
public class PokerDeck extends CardsDecks { @Override public String shuffle() { // 直接使用父类的花色常量 return "已洗牌,包含花色:" + HEARTS + "、" + CLUBS + "、" + DIAMONDS + "、" + SPADES; } }
内容的提问来源于stack exchange,提问作者Tijo
相关产品推荐
相关产品推荐

