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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. class Fu
  2. {
  3.         int num = 5;
  4. }

  5. class Zi extends Fu
  6. {
  7.         int num = 4; //子类继承了父类,父类中的成员不是应该被继承吗?为什么在子类中可以定义和父类同名的成员变量?方法却不可以?
  8. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

4 个回复

倒序浏览
谁告诉你子类中不能有父类的方法的,如果子类写了与父类同名的方法,那叫复写父类的方法,可以用来功能扩展。同学你要学的东西还很多啊!
这两个地方的变量  int num; 是两个不同的变量,因为都是局部各自的变量。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
我认为是不管是成员变量还是成员函数,子类都会从父类类中继承。
但是,如果在子类中重新定义和父类一样的成员(包括成员变量和成员函数),就相当于覆盖了。
所以说子类中可以有和父类相同的成员变量,成员方法也是可以的
  1. class fu
  2. {
  3.         int num = 3;
  4.         public void add()
  5.         {
  6.                 System.out.println("fu:"+(num+1));
  7.         }
  8. }
  9. class zi extends fu
  10. {
  11.         int num = 4;//覆盖了父类中的成员属性
  12.         public void add()//覆盖了父类中的方法
  13.         {
  14.                 System.out.println("zi:"+(num+2));//方法主体和父类不同
  15.         }
  16. }

  17. class  Test2
  18. {
  19.         public static void main(String[] args)
  20.         {
  21.                 System.out.println("Hello World!");
  22.                 new zi().add();//会调用zi类中的num(4)和子类的方法num+2
  23.         }
  24. }
复制代码

运行结果是:
zi:6

评分

参与人数 1技术分 +2 收起 理由
朱神必 + 2

查看全部评分

回复 使用道具 举报
向阳泪无痕 发表于 2014-4-1 13:19
谁告诉你子类中不能有父类的方法的,如果子类写了与父类同名的方法,那叫复写父类的方法,可以用来功能扩展 ...

我知道子类可以重写父类中的成员方法,我想问的是,子类继承了父类,子类应该也同时继承了父类中的成员变量num才对,是不是相当于在子类中隐形的存在int num = 5;这句话?写了同名的方法就会覆盖掉父类的方法,但是写了同名的成员变量却不会覆盖。变量既然不能覆盖,在子类中定义int num = 4;不就相当于子类中存在两个同名的成员变量吗?

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
刘望望 发表于 2014-4-1 14:03
我知道子类可以重写父类中的成员方法,我想问的是,子类继承了父类,子类应该也同时继承了父类中的成员变 ...

变量没有覆盖一说,子类可以直接拿父类的变量来用, 使用  super.变量名 来访问,如果你在子类又定义了,那是两个不同的变量。它们的作用域不同,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马