次の例を考えてみましょう
public class Human
{
public Human h1;
public String name;
public int age;
public Human()
{
name = "myName";
age = 22;
}
}
そこに h1 があることのポイントは何ですか? どのように使用できますか?なぜそれが使用されるのですか?new で作成したインスタンスをそのまま使用することはできませんか?
そこに h1 があることのポイントは何ですか?
それは完全にクラスに依存します。
どのように使用できますか?
他のインスタンス メンバーと同様です。
なぜそれが使用されるのですか?new で作成したインスタンスをそのまま使用することはできませんか?
各ノードが次の (場合によっては前の) ノードへのリンクを持つリンク リストを考えてみましょう。これらのリンクは、ノード自体と同じクラスになります。たとえば、おおよそ次のとおりです。
class LinkedListNode {
private LinkedListNode previous;
private LinkedListNode next;
private Object value;
LinkedListNode(LinkedListNode p, LinkedListNode n, Object v) {
this.previous = p;
this.next = n;
this.value = v;
}
LinkedListNode getPrevious() {
return this.previous;
}
// ...and so on...
}
他にも同様の使用例がたくさんあります。Person
クラスには、関係者 (配偶者、子供) のメンバーが含まれる場合があります。ツリー クラスにはおそらく葉があり、それはおそらく他の葉へのリンクを持っているでしょう。等。
コメントで、シングルトン クラスについて質問しました。はい、それは絶対に、クラスの型であるメンバーを持つケースです。これは標準的なシングルトンです (このテーマには多くのバリエーションがあります):
class Foo {
// The singleton instance
static Foo theInstance = null;
// Private constructor
private Foo() {
}
// Public accessor for the one instance
public static synchronized Foo getInstance() {
if (theInstance == null) {
theInstance = new Foo();
}
return theInstance;
}
// ...stuff for Foo to do, usually instance methods...
}
prev
を付けることができます。next
parent
child
firstChild
lastChild
prevSibling
nextSibling
例の 1 つ。構造のようなツリーがある場合、ノードには独自のタイプの子を含めることができます。これが、Human
クラスが独自の型の属性を持つ理由です。
リンクされたリスト、ツリーなどのデータ構造をJavaで実装するために、クラスと同じタイプのフィールドを持つことは非常に一般的です。
これは基本的に、C でこの目的のために使用されるポインターと同じです。
Javaで作成されたすべてのオブジェクトは、実際にはヒープ内のオブジェクトの実際の場所への「参照」であるため、ポインターがCにあるように表示できます。
次のようなもの:
struct List{
int val;
List *next;
}
Javaでは次のようになります:
class MyList{
int val;
MyList nextNode;
}