重複の可能性:
プライベートフィールドはサブクラスに継承されていますか?
サブクラスがプライベートフィールドに直接アクセスできないことは間違いありません。しかし、プライベートフィールドが存在する場合はどうなりますか?実際、私はパブリックメソッドまたは保護されたメソッドでプライベートフィールドにアクセスできます。
プライベートメソッドも。
誰かがこれが何をしているのか教えてもらえますか?
重複の可能性:
プライベートフィールドはサブクラスに継承されていますか?
サブクラスがプライベートフィールドに直接アクセスできないことは間違いありません。しかし、プライベートフィールドが存在する場合はどうなりますか?実際、私はパブリックメソッドまたは保護されたメソッドでプライベートフィールドにアクセスできます。
プライベートメソッドも。
誰かがこれが何をしているのか教えてもらえますか?
常にクラスのフィールドを作成する必要がありますprivate
。そしてpublic
、それらのフィールドにアクセスするためのアクセサメソッドを提供します。
これを行うことにより、あなたはそれのレベルを達成していencapsulation
ますOO language
。
また、直接アクセスを許可しないことのその他の利点は、外部クラスにアクセスを許可する前に、必要性とセキュリティに応じてフィールドを変更できることです。
実際、同じクラスでも通すことをお勧めしaccess the private fields
ます。getter methods
これは、クラスの変更も簡単に役立ちます。
将来、フィールドへのアクセス方法を変更したいとします(つまり、フィールドを返す前に、フィールドに対して何らかの処理を行います)。ここで、自分のクラスでも直接フィールドにアクセスしている場合。あらゆる場所に行って変更する必要があります。しかしgetter
、フィールドにアクセスするために使用した場合は、メソッドを変更するだけで済みmodify
ます。getter
public class A {
private int data;
public int getData() {
// Here apart from just return the `data`, you can perform some
// modification also according to your need..
}
}
これは正常な動作です。スーパークラスは抽象化を提供するので、対処する必要があります。実装の詳細に煩わされる必要はありません。明日実装が変更された場合、サブクラスを変更する必要はありません。スーパークラスがそれを隠します。
あなたが見ているのはカプセル化です。メソッドを介してクラスのメンバーへのアクセスを制御しており、直接アクセスできないようにしています。
この場合、 public、protected、およびprivateという用語の意味を読みたいと思うかもしれません。
それらのフィールドがprivateである場合、サブクラスはその親からフィールドおよびメソッドにアクセスできません。サブクラスがそれらのフィールドおよびメソッドにアクセスできるようにする場合、(親クラスで) 使用する必要がある可視性修飾子はprotectedです。
protectedの使用は、具体的にはサブクラスであり、サブクラスのみが親クラスのフィールドとメソッドにアクセスできます。