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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓超军 中级黑马   /  2012-7-17 21:28  /  3016 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. abstract class Person
  2. {
  3.         private String name;
  4.         Person(String aName)
  5.         {
  6.                 name=aName;
  7.         }
  8.         public String getName()
  9.         {
  10.                 return name;
  11.         }
  12. }

  13. class Student extends Person
  14. {
  15.         private String major;
  16.         Student(String aName,String aMajor)
  17.         {
  18.                 super(aName);
  19.                 major=aMajor;
  20.         }
  21.        
  22.         public String getInfo()
  23.         {
  24.                 return name+"..."+major;//Student继承了Person,不是也有name
  25.                                         //这个成员变量吗?为什么还出错?
  26.         }
  27. }
复制代码

12 个回复

倒序浏览
private String name;//父类里的name是private的,子类不能继承过来,想要直接用起码要改成protected,或者调用方法,当然调用getname方法比较常规。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
访问限制符  private只有本类可以使用
           默认friendly可以被同包的类访问  
           protect 可被本类 同包 子类
           public 都可以调用
所以应该在public String getInfo()

        {

                return getName()+"..."+major;//Student继承了Person,不是也有name

                                        //这个成员变量吗?为什么还出错?

        }

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
父类中的变量被私有了,子类就不能够直接访问父类中的变量,可以通过父类提供的方法 void getName()方法来调用,在你的代码中,直接拿来用是不可以的。
私有成员后,子类相当于看不到那些被私有的成员,所以不能直接拿来用。
回复 使用道具 举报
3:权限修饰符
                同一个类中        同一个包中        不同包中的子类中 不同包中
private        OK                               
(default)        OK                OK
protected        OK                Ok                OK
public                OK                OK                OK                        OK

继承中的成员变量的特点:
1:子类直接继承了本身没有的成员变量。
2:当子类中有和父类同名的成员变量时。在方法中打印的是子类自己的。
3:当子类方法中有局部变量和成员变量同名,在方法中打印的是局部变量。
4:私有的成员变量是不能被继承的。

一般用公有的方法来获取其值,既然是其子类,那么就继承了他个公有的方法,比如getName();所有可以直接调用这个方法。但是如果在一个静态的方法中就不能直接调用
而需要通过实例对象的引用来调用,因为静态方法不能直接调用非静态方法,如果子类中复写了父类的这个方法,那么就必须通过super.getName()来调用父类中的此方法。

回复 使用道具 举报
abstract class Person
{
private String name; //  private是私有的意思   在这里使用private就是把name私有化啦
                                   所以子类无法继承name
                                   不要private就OK拉
回复 使用道具 举报
私有化的成员变量不能直接访问,需要用getName()这个public的函数来获取{:soso_e100:}
回复 使用道具 举报
本帖最后由 张世威 于 2012-7-18 00:01 编辑

这是一个访问权限的问题:
1、子类可以继承父类的所有成员(除了构造函数),不管父类的成员是什么权限的,不过继承归继承,访问又是另外一回事了。  就像有什么用什么是不一样的,你能用的一定是你有的,不过你有的你不一定能用。举个例子,你爸爸在银行里给你存了100元,这100元可以说是你所拥有的,不过,你却不能直接到银行去取这100元,你要想用这100元,还是需要找你爸爸,看他提没有提供方式让你用,比如说给你银行卡和密码。

       这样的方式就限定死了你能用这100元的方式了,这样就可以有效的控制了这100元钱,不然100元钱被你用光了,你爸爸还不知道。

2、就像这个父类里面,有getName方法,限定死了,你只能获取name的值,不能对name有其他的操作了。如果父类允许你修改的话,还会提供setName方法,这一对方法叫:访问器和设置器,它封装了内部的实现。

3、继承什么和访问什么没有关系,切记。
     四种访问权限:
   ①public:所有类都可以访问,
   ②protected:子类和同包类,
   ③ 缺省:同包类
  ④ private:本类,
一般都把字段设置成private,为字段设置的方法为public,用这种方式有效控制字段的访问。
  
回复 使用道具 举报
父类中的私有成员只能在本类中,子类不可以访问,如果访问,可以通过方法访问
1) private
  类中限定为private的成员,只能被这个类本身访问。
  如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。

  2) default
  类中不加任何访问权限限定的成员属于缺省的(default)访问状态,可以被这个类本身和同一个包中的类所访问。

  3) protected
  类中限定为protected的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。

  4) public
  类中限定为public的成员,可以被所有的类访问。
回复 使用道具 举报
本帖最后由 张世威 于 2012-7-18 01:17 编辑
周坤 发表于 2012-7-17 21:41
private String name;//父类里的name是private的,子类不能继承过来,想要直接用起码要改成protected,或者 ...

1、哥们,子类可以继承父类除了构造函数外的所有成员,只是父类对不同的成员设置了不同的权限。
2、继承=拥有 ,访问=使用,     你拥有什么,你就一定能用什么啊?你能用的肯定属于你拥有的
3、在java里面,为了防止成员被滥用,所有设置了权限。你学习了反射后就知道了,反射就是暴力访问哪些不让访问的,既然能暴力访问的到,那么这些私有的成员自然都被继承来了。
回复 使用道具 举报
张世威 发表于 2012-7-18 01:16
1、哥们,子类可以继承父类除了构造函数外的所有成员,只是父类对不同的成员设置了不同的权限。
2、继承= ...

哦,哦,你是对的,的确可以继承,我有点模糊,还要加油看啊!
回复 使用道具 举报
哈哈,互相学习啊,我也是看了你的说法后,好好查了资料的,学了不少东西
回复 使用道具 举报
周坤 发表于 2012-7-18 01:28
哦,哦,你是对的,的确可以继承,我有点模糊,还要加油看啊!


哈哈,互相学习啊,我也是看了你的说法后,好好查了资料的,学了不少东西
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马