想象一下:
每个单词都是一个字符列表。然而,本身不可能存在任何角色,它总是必须是一个单词的一部分。
所以Word类看起来像这样:
class Word extends List<MyCharacter>
现在,如何强制实施不能MyCharacter
不属于Word
的{{1}}?也许让MyCharacter
成为Word
的私有内部类,并向addCharacter(String character)
添加Word
等方法?但是,当Word
是MyCharacter
的私有内部类时,是否可以让Word
扩展List类?
感谢您提供任何暗示!
更新
我现在最终到了
import java.util.ArrayList;
public final class Word extends ArrayList<Word.MyCharacter> {
protected final class MyCharacter
{
private String character;
public String getCharacter() {
return character;
}
public MyCharacter(String character)
{
this.character=character;
}
}
public void addCharacter(String character) {
add(new MyCharacter(character));
}
}
以下是它的使用方法:
public static void main(String[] args) {
Word word = new Word();
// word.add(new MyCharacter("a")); // as intended: not possible, because MyCharacter class can't be accessed
word.addCharacter("a"); // ok
}
答案 0 :(得分:1)
也许将Character作为Word的私有内部类并向Word添加类似addCharacter(String character)的方法?
是。 - 或者可能只声明MyCharacter
私有和MyCharacter
类final
的构造函数。或者声明MyCharacter
以外的Word
课程,其中包含&#39; package-private&#39;构造函数。或者在MyCharacter
appendToWord( Word w, Character char )
内部有一种(静态)工厂方法和私有构造函数。或......: - )
编辑:我首先误解了这个问题:
是否可以让Word使用私有内部Character类扩展List类?
Word
可以任何方式扩展List<T>
。但是 - 你想出来的不是List<Word.SomeInnerClass>
。
答案 1 :(得分:1)
理论上这是可能的。将出现一个问题:Character
已经是一个java类。此外,如果您正在使用Eclipse,则不会让您声明
public class Word extends ArrayList<Letter> {
private class Letter {
//...
}
}
除非你最多保留信件。我不确定这是一个Eclipse问题,还是Java也会阻止你。
关于你的超类问题,这是因为你不能使用List,因为它只是一个接口。你必须使用实现它的东西,比如ArrayList。