SCJPノート(一)
1、デフォルトのアクセスレベルとprotect:
protectとデフォルトのアクセス制御レベルはほぼ同じですが、主な違いがあります.デフォルトメンバーにアクセスできるのは、デフォルトメンバーにアクセスするクラスが同じパッケージに属している場合のみです.保護メンバーの場合、サブクラスが異なるパッケージに存在していても、そのサブクラスはアクセスできます(継承によって).protectレベルが使用されている場合、パッケージ外のサブクラスが保護メンバーを継承すると、そのメンバーはこのサブクラス外の任意のコードに対してプライベートになりますが、サブクラスのサブクラスについてはそうではありません.サブクラスがメソッドを書き換えると、サブクラスから親メソッドを呼び出すことができます.2、書き換え:静的方法は書き換えられない;
リロード方法ではできないことは、戻りタイプだけを変えることです!!でもJDK 1から5以降、コヒーレント戻りという特殊な状況が発生した.
コヒーレントリターン:既知の継承関係の場合、そのサブクラスのリターンタイプを使用してそのインタフェース実装クラスまたは親メソッドを「再ロード」し、既知の実装クラスのリターンタイプがAPIよりも具体的である場合に、タイプ強制変換を回避するのによく使用されます.
例:
この場合、戻り値タイプのみを変更して書き換えることができます.
protectとデフォルトのアクセス制御レベルはほぼ同じですが、主な違いがあります.デフォルトメンバーにアクセスできるのは、デフォルトメンバーにアクセスするクラスが同じパッケージに属している場合のみです.保護メンバーの場合、サブクラスが異なるパッケージに存在していても、そのサブクラスはアクセスできます(継承によって).protectレベルが使用されている場合、パッケージ外のサブクラスが保護メンバーを継承すると、そのメンバーはこのサブクラス外の任意のコードに対してプライベートになりますが、サブクラスのサブクラスについてはそうではありません.サブクラスがメソッドを書き換えると、サブクラスから親メソッドを呼び出すことができます.2、書き換え:静的方法は書き換えられない;
リロード方法ではできないことは、戻りタイプだけを変えることです!!でもJDK 1から5以降、コヒーレント戻りという特殊な状況が発生した.
コヒーレントリターン:既知の継承関係の場合、そのサブクラスのリターンタイプを使用してそのインタフェース実装クラスまたは親メソッドを「再ロード」し、既知の実装クラスのリターンタイプがAPIよりも具体的である場合に、タイプ強制変換を回避するのによく使用されます.
例:
public class A{
}
class B extends A{
}
class C {
public A test(){
return new A();
}
}
class D extends C{
public B test() {
return new B();
}
}
この場合、戻り値タイプのみを変更して書き換えることができます.