java 访问 protected_java基础之访问修饰符protected

java的访问修饰符protected关键字让我很迷惑,网上的很多人业内人士的自我注解也依然没有消除我对这个关键字的认识。

我的疑惑有以下几点:

1:增设protected关键字的初衷,也就是说:这个的“受保护”的原理是什么??

2:在Think in Java中,对protected定义是有误的。

3:protected的作用到底是什么呢?

4:涉及到继承。

在java编程思想中:通过阅读,我的理解是:

关于对有protected访问修饰符的类的继承,可以分为两种情况:

(1)不同包的继承。

书中说:在一个新的包中得类继承原始包中的类,只能访问原始类中的public修饰成员

这里有三种很显著的不能访问:

1)不同包下:在子类中,“父类引用指向子类对象”这种类型的变量是无法访问父类中被protected修饰的变量或者方法的。下面是一个例子:

package com.hjj.base;

public class Cookie {

public Cookie(){

System.out.println("Cookie constructor");

}

protected void bite(){

System.out.println("bite");

}

}

子类代码:

package com.hjj.Father;

import com.hjj.base.Cookie;

public class ChocolateChip extends Cookie {

public ChocolateChip (){

System.out.println("Chocolatechip constructor");

}

public void chomp(){

bite();

}

@Override

public void bite(){

System.out.println("嘿嘿");

}

public static void main(String args[]){

ChocolateChip c = new ChocolateChip();

c.chomp();

c.bite();

/*

下面就是父类引用指向子类对象,但是在c1.bite()回报编译错误

错误是:change visiblity  bite() to "protected"

*/

Cookie c1 = new ChocolateChip();//不同包下的:父类引用对象不能访问被protected修饰的变量

c1.bite();//报错句子

}

}

2)第二种情况:不同包下:在子类中,父类的对象不能访问自己的protected变量。(我们看下面的例子)

父类代码:

package com.hjj.base;

public class Cookie {

public Cookie(){

System.out.println("Cookie constructor");

}

protected void bite(){

System.out.println("bite");

}

}

子类代码:

package com.hjj.Father;

import com.hjj.base.Cookie;

public class ChocolateChip extends Cookie {

public ChocolateChip (){

System.out.println("Chocolatechip constructor");

}

public void chomp(){

bite();

}

@Override

public void bite(){

System.out.println("嘿嘿");

}

public static void main(String args[]){

ChocolateChip c = new ChocolateChip();

c.chomp();

c.bite();

//父类对象

Cookie c1 = new Cookie();//不同包下的:父类对象不能访问自己的protected修饰的变量

c1.bite();//还是报错,和上面一样的错误

}

}

3)第三种情况:不同包下:不同的子类,是不能在其他子类中访问父类的protected修饰的变量的,而同一个包下就完全不会出现这样的问题。java语言的迷惑性,这么做到底有什么实际意义呢?

(2)同一个包中的继承:

包中的类对象都可以访问到被protected修饰的成员变量或者方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值