A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 你懂得 中级黑马   /  2013-8-23 21:03  /  1594 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 forward 于 2013-8-24 20:22 编辑

子类可不可以直接访问父类的父类?如果可以的话,那要怎样访问?

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

9 个回复

倒序浏览
可以访问,因为无论继承了多少代,父辈的数据和方法都会留给子辈。
  1. package exercise;

  2. class Grandpa{
  3.         public static String name="GradeFa";
  4.         public static void syso(){
  5.                 System.out.println("yo~i'm your GradeFa");
  6.         }
  7. }

  8. class Dady extends Grandpa{
  9.         public static int age = 40;
  10. }

  11. public class ExtendsTest extends Dady{

  12.         public static void main(String[] args) {
  13.                 System.out.println(name);
  14.                 System.out.println(age);
  15.                 syso();
  16.         }
  17. }
复制代码
输出:
GradeFa
40
yo~i'm your GradeFa

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
1
子类可以访问父类中的非私有的属性或者行为
2
子类不可以访问父类中的私有的属性或者行为
3
Java支持多层继承(继承体系)
class A{}
class B extends A{}
class C extends B{}

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
本帖最后由 张云飞 于 2013-8-23 21:56 编辑

如果你非要这么设计到话,可以使用 new 类名().方法()   :
  1. class A{
  2.          void showA(){
  3.                    System.out.println("AAAA");
  4.          }
  5. }
  6. class B extends A{
  7.          void showB(){
  8.                   System.out.println("BBBB");
  9.           }
  10. }
  11. class C extends B{
  12.           void showC(){
  13.                   new A().showA();
  14.          }
  15. }
  16. public class Test{
  17.         public static void main(String args[]){
  18.                 new C().showC();
  19.         }
  20. }
复制代码
但是这样似乎不太符合面向对象。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
可以,你子类怎么访问父类,就可以子类访问父父类。
回复 使用道具 举报
  1. class grandFather
  2. {   
  3.         String gF="爷爷";
  4.         void showGF()
  5.         {
  6.                 System.out.println(gF);
  7.         }
  8. }
  9. class father extends grandFather
  10. {   
  11.         String F="爸爸";
  12.         void showF()
  13.         {
  14.                 System.out.println(F);
  15.         }
  16. }
  17. class me extends father
  18. {
  19.         String M="我";
  20.         void showM()
  21.         {
  22.                 System.out.println(M);
  23.         }
  24. }
  25. public class Demo
  26. {
  27.     public static void main(String[] args)
  28.     {
  29.          me m =new me();
  30.          m.showM();
  31.          m.showF();
  32.          m.showGF();
  33.     }
  34. }
复制代码
如果父类的父类没有被覆盖和私有的化,子类的子类都会继承下来,只要直接调用即可。

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
只要是一路继承过来的就没有问题
比如class Student extends Person
Student可以访问Person公开的属性跟方法
而我们的Person类呢?他虽然没有extends关键字 但他却隐式继承Object
所以你在使用Student的时候一样可以使用toString() ; equals()等方法
如果我现在class one extends two
class two extend three
one还是会一路向上找 直到找到最大父类Object

评分

参与人数 1技术分 +1 收起 理由
EYE_SEE_YOU + 1

查看全部评分

回复 使用道具 举报
meng 高级黑马 2013-8-24 16:49:56
8#
当然可以!
回复 使用道具 举报
举个形象的例子,男生可以继承学生这个类的方法,而学生可以继承人的方法。所以男生也可以继承人的基本方法,调用方法还是:子类名.父类方法();

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1 赞一个!

查看全部评分

回复 使用道具 举报
如果问题解决了,请把问题的未解决更改为已解决
谢谢合作!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马