Java中protected和default的区别

学习内容:

Java中权限修饰符:protected和default的区别


学习总结:

修饰符本类同一包的类不同包的继承类非继承类
public √ \surd √ \surd √ \surd √ \surd
protected √ \surd √ \surd √ / X \surd/\Chi /X X \Chi X
default √ \surd √ \surd X \Chi X X \Chi X
private √ \surd X \Chi X X \Chi X X \Chi X
  1. 当在同一包下,protected和default的作用是一样的(不管是同一包下的类或者是同一包下的继承类都能成功调用),当main方法所在的类和调用的类在同一个包下时,调用类中的方法或者属性,不管是protected或者是default修饰,main方法所在的类都能正常调用。
  2. protect修饰符比较复杂,如果子类与基类不在同一包中:那么在子类中,子类实例可以访问其从基类继承而来的 protected 方法或属性,而不能访问基类实例的protected方法或属性。

protect\default修饰的属性,在同一包下不同类中可以访问;

package com.company.test1; //同一包下
public class TestOne {
   protected String usrName = "ycc";
}
package com.company.test1; //同一包下
public class TestTwo{
   public static void main(String[] args) {
       TestOne testOne = new TestOne();
       System.out.println(testOne.usrName);
   }
}

运行结果
在这里插入图片描述

  1. 在不同包下,protected和default的作用是不一样的,当main方法所在的类和调用的类不在同一个包下时,default或者protected修饰的方法或者属性都不能被成功调用,如果main方法所在的类继承了调用类,如果调用类中的方法或者属性使用protected修饰,那么可以成功掉用,如果是用default修饰,那么没有办法被调用; 5. protected比deault的范围更广,多的范围是不同包下的继承类,如果使用protected,那么也能被成功访问。不同包下,使用protected或者default修饰的属性不能被访问;
package com.company.test1; //不同一包下
public class TestOne {
   protected String usrName = "ycc";
}
package com.company.test2; //不同一包下
public class TestTwo{
   public static void main(String[] args) {
       TestOne testOne = new TestOne();
       System.out.println(testOne.usrName);
   }
}

运行结果
在这里插入图片描述
当不同包下,main所在的类继承了调用类,调用类中的属性拥protected修饰,便可以成功访问

package com.company.test1; //不同一包下
public class TestOne {
   protected String usrName = "ycc";
}
package com.company.test2; //不同一包下
public class TestTwo extends TestOne{
   public static void main(String[] args) {
       TestTwo testTwo = new TestTwo();
       System.out.println(testTwo.usrName);
   }
}

运行结果
在这里插入图片描述
当不同包下,main所在的类继承了调用类,调用类中的属性拥protected修饰,如果在继承类中创建父类实例,父类实例无法访问protected属性

//UserDaoImpl中的ans是用protected修饰的,并且User类和UserDaoImpl类在不同包中
public class User extends UserDaoImpl {
    public void main(String[] args) {
        User user = new User();
        UserDaoImpl userDao = new UserDaoImpl();
        System.out.println(user.ans);//可以成功访问
        System.out.println(userDao.ans);//无法成功访问
    }
}
  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Micheal_YCC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值