class A {
void test() {
}
}
class B extends A {
void test() {
}
public static void main(String[] args)
{
B b=new B();
//insert code here
}
}
test
クラスBのオブジェクトbのクラスAのメソッドを呼び出すにはどうすればよいですか?特にオブジェクトbの場合
class A {
void test() {
}
}
class B extends A {
void test() {
}
public static void main(String[] args)
{
B b=new B();
//insert code here
}
}
test
クラスBのオブジェクトbのクラスAのメソッドを呼び出すにはどうすればよいですか?特にオブジェクトbの場合
Bの外部から呼び出すことはできませんが、Bの内部では次のように呼び出すことができます。
super.test();
test()
これは、B内の任意のコードから実行できます。メソッド自体に含まれている必要はありません。したがって、たとえば:
public void foo() {
// Call the superclass implementation directly - no logging
super.test();
}
@Override void test() {
System.out.println("About to call super.test()");
super.test();
System.out.println("Call to super.test() complete");
}
メソッドをオーバーライドすることを実際に意味した@Override
ことをコンパイラーに通知するアノテーションに注意してください。(他のことは別として、メソッド名にタイプミスがある場合、これはそれをすばやく見つけるのに役立ちます。)
Bの外部から呼び出すことができない理由は、Bがメソッドをオーバーライドするためです...オーバーライドの目的は、元の動作を置き換えることです。たとえば、パラメータを持つメソッドでは、Bは、スーパークラスの実装を呼び出すか、他のことを行う前に、パラメータを使って何かを実行したい場合があります(独自のルールに従って検証します)。外部コードがAのバージョンを呼び出すことができれば、それはBの期待(およびカプセル化)に違反します。
クラス自体はエラーです。クラス名を定義するときに括弧を追加しないでください。オブジェクト型キャストを使用するか、クラスBsuper.test()
のメソッドで呼び出すことができますtest
class A
{
test()
{}
}
class B extends A
{
test()
{
super.test() // calls the test() method of base class
}
}
B b=new B();
これは、派生クラスオブジェクトを使用して基本クラスメソッドを呼び出すために使用できます。
b.super.test()