Java'da, bir temel sınıfın yöntemini türetilmiş bir sınıfta geçersiz kılma yönteminden nasıl çağırabilirim?


137

İki Java sınıfı var: aşağıdaki gibi başka bir A sınıfı genişletir B:

class A {
    public void myMethod() { /* ... */ }
}

class B extends A {
    public void myMethod() { /* Another code */ }
}

Ben çağırmak istiyorum A.myMethod()den B.myMethod(). C ++ dünyasından geliyorum ve Java'da bu temel şeyi nasıl yapacağımı bilmiyorum.

Yanıtlar:


145

Aradığınız anahtar kelime super. Örneğin bu kılavuza bakın .


4
Görünüşe göre C ++ 'da belirli bir ata yöntemini çağırabilirsiniz, ama java değil, sadece zinciri geçebilir ...
rogerdpack

132

Sadece süper kullanarak arayın.

public void myMethod()
{
    // B stuff
    super.myMethod();
    // B stuff
}

21

Cevap aşağıdaki gibidir:

super.Mymethod();
super();                // calls base class Superclass constructor.
super(parameter list);          // calls base class parameterized constructor.
super.method();         // calls base class method.

20

super.MyMethod()içeride çağrılmalıdır MyMethod()arasında class B. Yani aşağıdaki gibi olmalı

class A {
    public void myMethod() { /* ... */ }
}

class B extends A {
    public void myMethod() { 
        super.MyMethod();
        /* Another code */ 
    }
}


7

Java Reflection mekanizmasını kullanarak yapabileceğinizden eminim. Süper kullanmak kadar basit değildir, ancak size daha fazla güç verir.

class A
{
    public void myMethod()
    { /* ... */ }
}

class B extends A
{
    public void myMethod()
    {
        super.myMethod(); // calling parent method
    }
}

Bu, kodda herhangi bir java yansıması göstermez ve diğerleriyle aynı koddur. Cevabı daha var mı?
Nelda.techspiress


3
super.baseMethod(params);

süper anahtar sözcüklerle temel yöntemleri çağırın ve ilgili parametreleri geçirin.


3
class test
{
    void message()
    {
        System.out.println("super class");
    }
}

class demo extends test
{
    int z;
    demo(int y)
    {
        super.message();
        z=y;
        System.out.println("re:"+z);
    }
}
class free{
    public static void main(String ar[]){
        demo d=new demo(6);
    }
}

3

Bakın, burada temel sınıf yöntemlerinden birini geçersiz kıyorsunuz, bu nedenle miras alınan sınıftan base class yöntemini çağırmak istiyorsanız, devralınan sınıfın aynı yönteminde super anahtar sözcüğünü kullanmanız gerekir .


1

Bu yöntemleri başlatma için kullanıyorsanız, A sınıfı yapıcıları kullanın ve B anahtarını yapıcısının içinde super anahtar sözcüğünü iletin.

Veya alt sınıf yönteminden bir süper sınıf yöntemi çağırmak istiyorsanız, alt sınıf yönteminin içinde super anahtar sözcüğünü kullanmak zorundasınız: super.myMethod ();


1
// Using super keyword access parent class variable
class test {
    int is,xs;

    test(int i,int x) {
        is=i;
        xs=x;
        System.out.println("super class:");
    }
}

class demo extends test {
    int z;

    demo(int i,int x,int y) {
        super(i,x);
        z=y;
        System.out.println("re:"+is);
        System.out.println("re:"+xs);
        System.out.println("re:"+z);
    }
}

class free{
    public static void main(String ar[]){
        demo d=new demo(4,5,6);
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.