昨天下班和同事谈到protected的问题,然后发现自己对这个并不了解 ,今天做了一个例子记录一下
概念:
1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用
2、private:private表示私有,私有的意思就是除了class本类之外,任何其他类都不可以直接使用
3、protected:表示受保护权限,体现在继承,即子类可以访问父类受保护成员,同时相同包内的其他类也可以访问protected成员。(同包及其子类可以访问)
4、默认的:同一个包内可以访问,访问权限是包级访问权限
作用域 | 当前类 | 同一package | 子孙类 | 其他package |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
protected权限:
1.同一个包中 声明为protected的方法和成员变量能被所有类所访问。
2.在不同包中 子类是不能通过父类的实例访问protected权限的方法或者变量的,能够使用其父类中protected成员的途径只能是,使用子类(或者是子类的子类)的引用(通俗解释就是不同包中的子类可以访问父类 但不是通过实例化父类的方式调用 而是可以直接调用或者实例化子类)
例如下面的代码:
父类:
package com.help.demo.spring.impl;
import java.util.Map;
import javax.security.auth.message.MessageInfo;
import com.help.demo.spring.MessageService;
public class MessageServiceImpl implements MessageService {
protected String test1 = "被保护的属性";
@Override
public String getMessage() {
// TODO 自动生成的方法存根
return "hello world 3";
}
protected String name() {
System.out.println("被保护的方法");
return "";
}
String name2(){
System.out.println("默认方法");
return "";
}
private void name3(){
System.out.println("私有方法");
}
}
不在同一包下的子类:
package com.help.demo.test;
import com.help.demo.spring.impl.MessageServiceImpl;
public class test extends MessageServiceImpl{
public void hh(){
MessageServiceImpl impl= new MessageServiceImpl();//new不能使用new对象调用
this.name();
//或者
test t = new test();//通过new子类的对象调用父类的protected方法
t.name();
}
}
我是一个菜鸟 如果有什么不对的地方欢迎各位大神指正!
声明:本人只是为了记录自己的经历,如果侵犯到您的权益 ,请与1194821568@qq.com联系