【问题标题】:How i use superparent class method from child class我如何使用子类中的超父类方法
【发布时间】:2012-05-24 19:03:00
【问题描述】:
abstract class SuperParent
{
    public abstract void Show();
    public void Display()
    {
        System.out.println("HI............I m ur grandpa and in Display()");
    }
}

abstract class Parent extends SuperParent
{
    public abstract void Detail(); 
    public void  Show()
    { 
        System.out.println("implemented  abstract Show()method of Superparent in parent thru super");
    }
    public void Display()
    {
        System.out.println("Override display() method of Superparent in parent thru super");    
    }
}

public class Child extends Parent
{
    Child()
    {
        super.Show();
        super.Display();
    }
    public void  Show()
    {
        System.out.println("Override show() method of parent in Child");
    }
    public  void Detail()
    {
        System.out.println("implemented abstract Detail()method of parent ");
    }
    public void Display()
    {
        System.out.println("Override display() method of Superparent and Parent in child ");    
    }

    public static void main(String[] args) {
        Child c1= new Child();
        c1.Show();
        c1.Display();

        Parent p1=new Child();
        p1.Detail();
        p1.Display();
        p1.Show();

    }
}

我用一个抽象方法 show() 和一个具体方法 Display() 创建了一个抽象类超父类。现在我们创建一个父类,用一个抽象方法 detail() 和具体方法 display() 扩展父类,该方法从父类覆盖并在父类中实现抽象的 show() 方法,现在我创建了一个子类扩展父类,并在父类中实现抽象方法 Detail(),在父类和超父类中覆盖 display() 方法,并在父类和父类中覆盖 show()在父母中。现在我创建一个子实例并运行所有方法,它调用所有子方法,很好。如果我们想运行父方法,那么我们在构造函数中使用 super.parent 方法,运行很好。但是我如何运行超父方法 display()从儿童班。

【问题讨论】:

  • 有什么不可能的,请您指定。

标签: java inheritance abstract-class


【解决方案1】:

Java 语言不支持此功能。

您必须从Parent 调用SuperParent.show() 并从Child 调用此代码:

abstract class Parent extends SuperParent {

    ...

    public void superParentShow() {
        super.Show();
    }
}

然后调用

super.superParentShow()

来自Child

相关问题:

【讨论】:

  • 如果我们使用抽象类的层次结构并覆盖方法,那么我们就不能为 superparent 的每个方法编写代码。它毫无价值..而且不可行
  • 确实如此。但你不应该那样做。如果子类扩展了父类,那么它就是父类,如果父类是子类,那么它应该为子类提供必要的方法,但不能更多。提供来自祖父母的所有方法是打破封装的最佳方式。
  • 我们知道super是用来执行父方法的,构造函数意味着它有父类的引用,如果我们用superparent类型转换super,那么我们可以访问superparent的方法。我们可以转换super
  • 对父(和超父)的引用与子引用相同。 ('这')。您可以强制转换,但不会有任何区别,因为所有方法都是虚拟的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
  • 1970-01-01
  • 2014-08-24
  • 1970-01-01
  • 2022-01-16
  • 2016-02-14
  • 2013-07-25
相关资源
最近更新 更多