当前位置:  技术问答>java相关

多重继承(多于两重)中怎样调用最上层的隐藏的成员?

    来源: 互联网  发布时间:2015-04-25

    本文导语:  问题描述: 三个类的继承关系如下: a |--b    |--c 三个类都有方法print(); 在类c中可以用this.print()来调用自己的print()方法;         可以用super.print()来调用b的方法 问:在类c中怎么样调用a的print()方法 ...

问题描述:
三个类的继承关系如下:
a
|--b
   |--c
三个类都有方法print();
在类c中可以用this.print()来调用自己的print()方法;
        可以用super.print()来调用b的方法

问:在类c中怎么样调用a的print()方法

|
辛苦辛苦,这个知识点给忘记了,呵呵,好不容易找了回来,你自己看看吧
public class ShadowTest {
public static void main(String s[]){
new STChild().demo();
}
}
class STGrandParent {
double wealth = 50000.00;
public double getWealth() {
System.out.println("GrandParent-" + wealth);
return wealth;
}
}
class STParent extends STGrandParent {
double wealth = 100000.00;
public double getWealth() {
System.out.println("Parent-" + wealth);
return wealth;
}
}
class STChild extends STParent {
double wealth = 200000.00;
public double getWealth() {
System.out.println("Child-" + wealth);
return wealth;
}
public void demo() {
getWealth(); // Calls Child method
super.getWealth(); // Calls Parent method
//super.super.getWealth(); // Compiler error, GrandParent method cannot be accessed
((STParent)this).getWealth(); // Calls Child method, due to dynamic method lookup
((STGrandParent)this).getWealth(); // Calls Child method, due to dynamic method
// lookup
System.out.println(wealth); // Prints Child wealth
System.out.println(super.wealth); // Prints Parent wealth
System.out.println(((STParent)(this)).wealth); // Prints Parent wealth
System.out.println(((STGrandParent)(this)).wealth); // Prints GrandParent wealth
}
}

|
修正一下楼上的,这样可以实现上上级方法回嗍,但是记住,面向对象的类继承最好的是到3层,如果多了将大大增加系统的开销。你可以在每一层实现对上层的重载。
public class ShadowTest {
    public static void main(String args[]){
        new STChild().demo();
    }
}
class STGrandParent {
    double wealth = 50000.00;
    public double getWealth() {
        System.out.println("GrandParent-" + wealth);
        return wealth;
    }
}
class STParent extends STGrandParent {
    double wealth = 100000.00;
    public double getWealth() {
        System.out.println("Parent-" + wealth);
        return wealth;
    }
     public double getGrandPWealth() {
        return super.getWealth();
    }
}
class STChild extends STParent {
    double wealth = 200000.00;
    public double getWealth() {
        System.out.println("Child-" + wealth);
        return wealth;
    }
    public double getGrandPWealth() {
        return super.getGrandPWealth();
    }
    public void demo() {
        getWealth(); // Calls Child method
        super.getWealth(); // Calls Parent method
        //super.super.getWealth(); // Compiler error, GrandParent method cannot be accessed
        ((STParent)this).getWealth(); // Calls Child method, due to dynamic method lookup
        ((STGrandParent)this).getWealth(); // Calls Child method, due to dynamic method
        this.getGrandPWealth(); // Calls GrandParent method;
        // lookup
        System.out.println(wealth); // Prints Child wealth
        System.out.println(super.wealth); // Prints Parent wealth
        System.out.println(((STParent)(this)).wealth); // Prints Parent wealth
        System.out.println(((STGrandParent)(this)).wealth); // Prints GrandParent wealth
    }
}

|
可不可以这样:
  在b中通过super调用a的print(),然后再在c中调用b的这个method!
小弟初学java四天,如果不对请多多原谅,献丑了

|
有这样的情况,说明你的类设计有问题。

|
是不是可以这样:
在C类中设定一个方法,其参数行为(A a)
方法体中使用if(a instanceof A)
           {
                a.print();
           }
将一个类的实例传入,如果是A类型的则会执行A中的print();
你还可以去查一下“下溯造型”==“DownCasting”;

|
不可以调用a.print

|
其实类设计的好的话,不会碰到这种问题的

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java没有多继承,用接口来实现多继承的功能,但哪里体现了多继承啊?我对接口的概念一直弄不清楚,请大家帮忙!
  • java继承的问题
  • 子进程继承锁的问题
  • 问一个很蠢的问题:什么是重载,继承,实例,派生,接口
  • 关于类的继承问题!着急!
  • C++多重继承与虚继承分析
  • 关于java的访问控制和继承,这段话怎么理解?
  • 接口继承类是怎么一回事?
  • 如何使JPanel中的一个继承JPanel的组件的尺寸发生动态改变???
  • 想继承统一软件包里的类怎么办?
  • 关于多重继承问题的答谢,请pengji(彭乃超)来领分!
  • 关于多重继承问题的答谢,请ajoo(jet pig)来领分!
  • 关于多重继承问题的答谢,请mygarfield((我被CSDN封杀过)) 来领分!
  • 关于多重继承问题的答谢,请Dickensi(流星·逐日)(★★★★) 来领分!
  • 如何让exec出的进程继承原来打开的流?
  • 菜鸟问题:请大家用简单的代码描述一下,如何利用接口实现多重继承!
  • fork出来的进程不能完全继承父进程的属性吗?
  • 关于继承的问题。。。。。
  • 急!我使用一个继承了JComponent的类绘图,我想将绘的图绘到Image,有什么办法吗?
  • 子进程为什么没有继承父进程的信号


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3