protected 在 继承中 的理解问题

caoyclearnc 2014-05-20 03:32:18
写了一段代码说明问题:

在包 a 中 写一个 父类 A ,A中有用protected 声明的成员变量k

package a;
public class A {
protected int k = 3;
}

在不同的包 :b中 写了一个子类B ,(继承A),//根据protected的定义,因为为父子关系,这个时候子类应该继承了父类中的k,同时子类扩展了父类内容,又声明了一个protected 成员变量j

package b;
import a.A;
public class B extends A {
void test() {
k++; //编译通过,说明B确实继承了A中的k变量
}
protected int j = 8;
}



//在和B同一个包中,定义一个Test类,来使用B

package b;
public class Test{
public static void main(String[] args) {
B bb = new B();
System.out.println(bb.k); // 编译不通过 ,这里不能理解
System.out.println(bb.j); //编译通过,这是理所当然的。
}
}


这里的问题就是, 子类 B 继承了 父类A 的protected 变量 k 。就相当于在子类B中定义了一个protected的成员变量k。那么为什么 在同一个包下,却不能使用成员变量k?




...全文
371 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
caoyclearnc 2014-05-20
  • 打赏
  • 举报
回复
引用 2 楼 hhdys412 的回复:
protected不能跨包吧?
你们指的挎包是什么意思 ?能否详细点, 我这里没有挎包啊 :Test 和 B在同一个包下 ,子类和使用子类的类在同一个包下,但是子类和父类不在同一个包下。
caoyclearnc 2014-05-20
  • 打赏
  • 举报
回复
引用 3 楼 f33998899 的回复:
protected是可以再子孙类用,但是不能跨包。 你类b是类a的子类,那么可以引用K,但是Test跟a毫无关系可以言,所以肯定就无噶引用k,甚至编译肯定不通过
但是 protected的定义是 同一个包中或者子类中。 类b是a 的子类可以引用k 。 但 b继承了a 的成员变量, Test 又和B是在同一个包下。同一个包下,为什么不能引用k?
-江沐风- 2014-05-20
  • 打赏
  • 举报
回复
f33998899 2014-05-20
  • 打赏
  • 举报
回复
protected是可以再子孙类用,但是不能跨包。 你类b是类a的子类,那么可以引用K,但是Test跟a毫无关系可以言,所以肯定就无噶引用k,甚至编译肯定不通过
坏坏的忧伤 2014-05-20
  • 打赏
  • 举报
回复
protected不能跨包吧?
caoyclearnc 2014-05-20
  • 打赏
  • 举报
回复
我在这里假象的情况就是这样。 我在网络上 找了一个 别人写好的包下来,(其中有一个类,类中有用到protected声明的变量) 我对这个包中的这个类不太满意, 在自己的包中,写了个子类继承了它,拓展了自己的一些功能。 当在自己的包下,新建类,使用这个子类的时候,发现其中的protected变量明明被子类继承了,却不能使用。 这样的话,那么父类中声明的protected 变量,是不是没有什么太大的意义? 实际开发中,声明protected变量的作用在哪里?

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧