黑马程序员技术交流社区

标题: 子类中的方法能否直接访问爷爷类的成员? [打印本页]

作者: 面具猴    时间: 2014-10-21 17:24
标题: 子类中的方法能否直接访问爷爷类的成员?
本帖最后由 面具猴 于 2014-10-22 17:18 编辑
  1. class Z0{
  2.         void show(){
  3.                 System.out.println("Foo.show()");
  4.         }
  5. }
  6. class Z1 extends Z0{
  7.         @Override
  8.          void show() {
  9.                 System.out.println("Z1.show()");
  10.         }
  11. }
  12. class Z2 extends Z1{
  13.         @Override
  14.         public void show() {
  15.                 System.out.println("Z2.show()");
  16.         }
  17.         public void Z2Func(){
  18.                 this.show();//访问Z2类对象的show方法
  19.                 super.show();//访问Z1类对象的show方法
  20.                 //如何直接访问Z0类对象的show方法?
  21.         }
  22. }
复制代码



作者: 付江涛    时间: 2014-10-21 18:05
既然代码都写出来了,自己看结果不就知道了吗?
作者: nerveva2000    时间: 2014-10-21 18:58
new个Z0 的对象,不知道是不是你想要的效果

  1. public void Z2Func()
  2.                         {
  3.                 this.show();//访问Z2类对象的show方法
  4.                 super.show();//访问Z1类对象的show方法
  5.                 //如何直接访问Z0类对象的show方法?
  6.                                 Z0 zz = new Z0();
  7.                                 zz.show();
  8.         }
复制代码

作者: 郑飞    时间: 2014-10-21 19:39
你不是经常用 equals toString什么的吗 连Object里面的成员都能访问 爷爷级别的肯定可以了
作者: mudao    时间: 2014-10-21 20:22
都继承下来了 肯定可以
作者: hanxing    时间: 2014-10-22 12:43
不创建z0对象是无法直接调用z0里面的public void show()方法的,因为z2把public void show()方法覆盖了.
你在z0创建个其它方法,如果z2没有覆盖那个方法就能直接通过z2的对象调用那个方法了.
class Z0 {
        public void show() {
                System.out.println("Foo.show()");
        }
        void test() {
        }
}
class Z1 extends Z0 {

        @Override
        public void show() {

                super.show();
        }
}
class Z2 extends Z1 {
        @Override
        public void show() {
                System.out.println("Z2.show()");
        }
       
        public void Z2Func() {
                new Z2().test();//成功调用z0的方法
                new Z2().show();
                // 如何直接访问Z0类对象的show方法?
        }
}
作者: 面具猴    时间: 2014-10-22 17:14
nerveva2000 发表于 2014-10-21 18:58
new个Z0 的对象,不知道是不是你想要的效果

这不是直接访问啊,这是通过对象间接访问。
this.show(); 和super.show(); 才是直接
作者: 面具猴    时间: 2014-10-22 17:16
郑飞 发表于 2014-10-21 19:39
你不是经常用 equals toString什么的吗 连Object里面的成员都能访问 爷爷级别的肯定可以了 ...

那是在没有覆盖父类的方法,父类的父类的方法。。。。的情况下才能直接使用Object类的方法。
作者: 面具猴    时间: 2014-10-22 17:18
好吧,看来在覆盖了所有父类的某个方法的情况下,无法直接访问超过两层的超类。。
作者: nerveva2000    时间: 2014-10-22 18:15
面具猴 发表于 2014-10-22 17:18
好吧,看来在覆盖了所有父类的某个方法的情况下,无法直接访问超过两层的超类。。 ...

看网上别人说,如果设计出来了三层继承关系,那就要考虑这样设计是否是最优了。。
作者: 面具猴    时间: 2014-10-23 08:38
是吗?谢谢提醒。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2