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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class A
  2. {
  3.         proteced void print(String s)
  4.         {
  5.                 System.out.println(s);
  6.         }

  7.         A()
  8.         {print("A()");}       
  9.        
  10.         public void f()
  11.         {
  12.                 print("A:f()";)
  13.         }
  14.        
  15. }

  16. class B extends A
  17. {
  18.         B()
  19.         {print("B()");}
  20.        
  21.         public void f()
  22.         {
  23.                 print("B:f()";)
  24.         }
  25.        
  26.         public static void main(String[] args)
  27.         {
  28.                 B b = new B();
  29.                 b.f();
  30.         }
  31. }
复制代码
练习代码如上。主要是讨论分析,得到的结果。我分析的过程:
1、B继承了A,在执行   【B b = new B(  );】之前,B应该会去寻找是否有继承A的 构造函数。这个对吧?
所以先执行 A()。 于是把 A()  赋值给了  print(String s),打印输出  【A()】

2、应该可以执行【B b = new B(   );】了吧?  我在这卡了。A父类的proteced  是表示什么?  如果换成private的话,是不是 B 就无法调用 A 中的print(String s ) 了?   第二步应该打印输出 是【B()】吧。

3、执行 b.f(   );      f()又调用了A的   print(String s )   打印输出【B:f()】   这步骤是算调用?还是算继承父类?有点背搞蒙了

评分

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

查看全部评分

5 个回复

倒序浏览

这题都是基础的,你多看看视频就没问题了...现在很多大神都懒得回答了,俺就帮忙码下字:
1、B继承了A,在执行   【B b = new B(  );】之前,B应该会去寻找是否有继承A的构造函数。这个对吧?-------
所以先执行 A()。 于是把 A()  赋值给了  print(String s),打印输出  【A()】-------完全正确
2、应该可以执行【B b = new B(   );】了吧?  我在这卡了。A父类的proteced  是表示什么?  如果换成private的话,是不是 B 就无法调用 A 中的print(String s ) 了?   第二步应该打印输出 是【B()】吧。
-------关于权限的关键字,你自己去看下视频或搜下资料就知道。我就说下你问的这两个,proteced 是受保护的,体现是同包子类或同类可访问。
而private,私有,表示仅本类可访问。 这个2,你就理解了吧。

3、执行 b.f(   );      f()又调用了A的   print(String s )   打印输出【B:f()】   这步骤是算调用?还是算继承父类?有点背搞蒙了

-------继承你应该知道啊,这里面b是B类的对象,而且B里面有f()方法,所以就是最简单的方法调用,和A没什么大关系。要说有就是子类重写了从父类那里继承来的方法f(),调用父类方法用关键字super,很多小细节自己尝试搞搞就清楚了、、、、加油骚年!


评分

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

查看全部评分

回复 使用道具 举报
  1. class A{
  2.         protected void print(String s) {
  3.                 System.out.println(s);
  4.         }
  5.          A () {
  6.                         print("A()");
  7.                 }        
  8.         public void f(){
  9.                 print("A:f()");
  10.         }   
  11. }
  12. class B extends A{
  13.         B(){
  14.                         print("B()");
  15.                 }  
  16.         public void f(){
  17.                 print("B.f()");
  18.                                 super.f();
  19.         }
  20.         public static void main(String[] args) {
  21.                 B b = new B();
  22.                 b.f();
  23.         }
  24. }
复制代码

代码也整理了一下,你直接运行看看把

评分

参与人数 1黑马币 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
刘旭升 发表于 2014-1-1 22:13
这题都是基础的,你多看看视频就没问题了...现在很多大神都懒得回答了,俺就帮忙码下字:
1、B继承了A,在 ...

谢谢,感激不尽!
文科生好几年没用过大脑运行数学了= =生锈了,而且计算机零基础,不会英语,自学起来,起步阶段还是挺吃力的。
在努力创造奇迹中。
回复 使用道具 举报
楼主注意一点
1、B继承了A,在执行   【B b = new B(  );】之前,B应该会去寻找是否有继承A的构造函数。这个对吧?不对,继承时是不会继承父类的构造函数的,因为子类继承父类的时候,是先运行父类构造函数;具体的说就是运行父类时就会先“调用”父类的构造函数,注意“调用”和继承不是一个含义。

评分

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

查看全部评分

回复 使用道具 举报
taoge 发表于 2014-1-2 00:03
楼主注意一点
1、B继承了A,在执行   【B b = new B(  );】之前,B应该会去寻找是否有继承A的构造函数。这 ...

多谢指点。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马