Rumah  >  Artikel  >  Amalan terbaik Java untuk memanggil kaedah terlebih beban bagi kelas induk dan anak

Amalan terbaik Java untuk memanggil kaedah terlebih beban bagi kelas induk dan anak

王林
王林ke hadapan
2024-02-09 11:30:09528semak imbas

Editor PHP Zimo membawakan anda amalan terbaik dalam pengaturcaraan Java - memanggil kaedah terlebih muatan kelas induk dan subkelas. Di Jawa, pewarisan ialah konsep pengaturcaraan berorientasikan objek penting yang membolehkan subkelas mewarisi sifat dan kaedah kelas induk. Kelebihan kaedah berlaku apabila kedua-dua kelas induk dan subkelas mentakrifkan kaedah dengan nama yang sama. Dalam kes ini, kita perlu memberi perhatian kepada cara memanggil kaedah terlebih beban kelas induk dan subkelas dengan betul untuk memastikan ketepatan dan kebolehselenggaraan program. Artikel ini akan memberi anda pengenalan terperinci kepada amalan terbaik untuk memanggil kaedah terlebih beban kelas induk dan subkelas untuk membantu anda menjadi lebih selesa dalam pengaturcaraan Java.

Kandungan soalan

Apakah cara terbaik untuk memanggil kaedah yang terlebih beban oleh kedua-dua kelas ibu bapa dan anak? Contohnya. Katakan saya mempunyai kelas ibu bapa dan anak

private class parent{
        public parent() {
        }
    }
    
    private class child extends parent{
        string name;

        public child(string name) {
            this.name = name;
        }
    }

Saya ingin mencipta kaedah yang membebankan kedua-duanya

private void methodcall(parent parent){
        system.out.println("parent class");
    }

    private void methodcall(child child){
        system.out.println(child.name);
    }

Saya mencipta kaedah untuk mencipta ibu bapa atau anak dan memanggil kaedah methodcall

private void callMethod(String name){
        Parent parent;
        if(name != null) {
            parent = new Child(name);
        } else {
            parent = new Parent();
        }
        methodCall(parent);
    }

Ini nampaknya selalu memanggil kaedah ibu bapa, bagaimana saya boleh memanggil kaedah anak tanpa secara eksplisit melemparkan objek kepada anak?

Penyelesaian

Pada pendapat saya, anda harus mengatasinya dalam kelas super parent 中创建一个名为 methodcall() 的方法,并分别在 child seperti ini:

protected void methodcall(){
    system.out.println("parent class");
}

dalam kelas child

@override
protected void methodcall(){
    system.out.println(this.name);
}

Lepastu awak panggil macam nimethodcall

Tandatangan kaedah
private void callmethod(string name){
    parent parent;
    if(name != null) {
        parent = new child(name);
    } else {
        parent = new parent();
    }
    parent.methodcall();
}

ditentukan oleh nama dan senarai parameternya. Ini bermakna methodcall(parent)methodcall(client) berbeza.

Apa yang anda mahukan bukanlah bebanan yang berlebihan, tetapi membebankan. Anda tahu apa yang saya maksudkan apabila anda menambah anotasi @override pada kaedah dalam @override 添加到 child dalam kod anda - pengkompil akan mengadu...

Jika anda membiarkan takrif kelas tidak berubah, anda perlu menghantar ke child 才能调用相应的方法 - 尽管这根本不起作用,因为 methodcall() 是非静态的(或者您有让 callmethod() 作为 child untuk memanggil kaedah yang sepadan - walaupun ini tidak berfungsi sama sekali kerana methodcall() bukan statik (atau anda perlu membenarkan callmethod() sebagai ahli

.

Atau anda menukar kod anda seperti ini:

class parent
{
  public parent() {}

  public <t extends parent> void methodcall( final t arg )
  {
    out.println( getclass().getname() );
  } 
}
    
class child extends parent
{
  string name;

  public child( string name ) 
  {
    this.name = name;
  }

  @override
  public <t extends parent> void methodcall( final t arg )
  {
    out.println( name );
  }
}

Gunakannya seperti ini:

public static void callMethod( final String name )
{
  Parent parent;
  if( name != null ) 
  {
    parent = new Child( name );
  } 
  else 
  {
    parent = new Parent();
  }
  parent.methodCall(parent);
}

Atas ialah kandungan terperinci Amalan terbaik Java untuk memanggil kaedah terlebih beban bagi kelas induk dan anak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam