黑马程序员技术交流社区

标题: 听课不认真,把这段忘记了。关于继承,类中的成员变量... [打印本页]

作者: 陈宇鹏    时间: 2013-4-7 21:45
标题: 听课不认真,把这段忘记了。关于继承,类中的成员变量...
本帖最后由 陈宇鹏 于 2013-4-8 01:35 编辑
  1. abstract class Worker
  2. {
  3.         String name;
  4.     int id;
  5.     double pay;
  6.     Worker(String name,int id,double pay)
  7.         {
  8.         this.name = name;
  9.         this.id = id;
  10.         this.pay = pay;
  11.     }
  12.     abstract void show();
  13. }

  14. class haha extends Worker
  15. {
  16.     haha(String name,int id,double pay)
  17.         {
  18.                 super(name,id,pay);
  19.         }
  20.     void show()
  21.         {
  22.                
  23.      }
复制代码
上面这一段中,我知道继承是没有办法继承私有化成员的
那不就是说这时父类中的成员变量是没有办法私有化?
我该如何保证除了子父类之外的对象不能够访问成员变量?


作者: 李凯    时间: 2013-4-7 21:57
有一个protected用来修饰,就能够在父类跟子类中私有,而其他的类是无法访问的。
public是公共的。
private表示私有的。
protected 表示子类或者同一个包中的类都能访问到。
具体就是在你3、4、5这3个变量前加入protected就行了。
作者: 陈宇鹏    时间: 2013-4-7 22:18
李凯 发表于 2013-4-7 21:57
有一个protected用来修饰,就能够在父类跟子类中私有,而其他的类是无法访问的。
public是公共的。
private ...

额。哈哈 有点超前。。。还没学到:lol
作者: 王川    时间: 2013-4-7 23:18
这里给出几个修饰符的访问最大范围
private:同一个类内部
default:同一个包中的类
protected:不同包中的子类
public:其他包中的各个类

所以,你这个情况加一个protected就行了
作者: 陈宇鹏    时间: 2013-4-8 00:38
王川 发表于 2013-4-7 23:18
这里给出几个修饰符的访问最大范围
private:同一个类内部
default:同一个包中的类

什么是不同包中的子类,能举个例子么
作者: 王川    时间: 2013-4-8 00:51
陈宇鹏 发表于 2013-4-8 00:38
什么是不同包中的子类,能举个例子么

在包com.itheima下有一个父类Father:
public class Father {
        protected static String name = "黑马";
}

在包com.itheima1下有一个子类Son,和一个非子类NotSon
public class Son extends Father {
        public static void main(String[] args) {
                System.out.println(name);//这里能访问
        }
}

public class NotSon {
        public static void main(String[] args) {
                System.out.println(new Father().name);//这里提示不能访问
        }
}



你会看到,不同包的时候,只有子类能访问父类的protected属性

懂了么
作者: 李凯    时间: 2013-4-8 00:56
本帖最后由 李凯 于 2013-4-8 01:01 编辑
王川 发表于 2013-4-8 00:51
在包com.itheima下有一个父类Father:
public class Father {
        protected static String name = "黑马";
你的说法没错。
作者: 王川    时间: 2013-4-8 01:04
李凯 发表于 2013-4-8 00:56
你的说法没错。

你写程序的时候,注意到类前面一般有一个package ……吗,如果后面的内容不同,就代表不同的包。
按照你这么说,那我很多文件还可以都放到E盘呢,难道都是属于同一个包??
作者: 王川    时间: 2013-4-8 01:06
本帖最后由 王川 于 2013-4-8 01:08 编辑

{:soso_e100:}
作者: 陈宇鹏    时间: 2013-4-8 01:34
王川 发表于 2013-4-8 01:04
你写程序的时候,注意到类前面一般有一个package ……吗,如果后面的内容不同,就代表不同的包。
按照你 ...

感谢 明白了。那么  同包下呢???我还没学到这里呢
作者: 王川    时间: 2013-4-8 01:38
陈宇鹏 发表于 2013-4-8 01:34
感谢 明白了。那么  同包下呢???我还没学到这里呢

同包下就是包名相同。
这个时候,如果你的属性没有加修饰符,则可以在同包下的类中访问到
作者: 陈宇鹏    时间: 2013-4-8 01:56
王川 发表于 2013-4-8 01:38
同包下就是包名相同。
这个时候,如果你的属性没有加修饰符,则可以在同包下的类中访问到 ...

那如果也用protected呢。。
这没影响吧
作者: 王川    时间: 2013-4-8 02:03
陈宇鹏 发表于 2013-4-8 01:56
那如果也用protected呢。。
这没影响吧

嗯,对的。后面范围大的能覆盖前面的范围。




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