文档章节

protected关键字

 恒者
发布于 2013/12/30 12:54
字数 528
阅读 27
收藏 0

protected关键字主要作用:控制类的继承者的访问权限。

(1)对于一个包含protected成员的类来说,其他任何位于同一包中的类(当然包括该类的子类)都可以访问其protected成员--包内访问权限;

(2)对于一个包含protected成员的类来说,继承该类的子类(不管该子类与其父类位于同一包中还是不同包中)都可以访问其protected成员

例如:

People.java:

package protecteddemo;
public class People {
    private String name;
    public People(String name){
        this.name = name;
    }
    protected void setName(String name){
        this.name = name;
    }
    public String toString(){
        return "Class People: " + name;
    }
    public static void main(String[] args){
        People people = new People("huhu");
        System.out.println(people);
    }
}

运行结果:

Class People: huhu

1.同一包中的其他类(均可访问People的protected成员):

(1)非子类:

package protecteddemo;

public class Student{
    private int sno;
    public Student(String name, int sno){
        this.sno = sno;
    }
    public void change(String name, int sno){
        new People("huhu").setName(name);
        this.sno = sno;
    }
    public String toString(){
        return "Class Student: " + sno + " ";
    }
    public static void main(String[] args){
        Student student = new Student("huhu", 1);
        System.out.println(student);
        student.change("huahua", 2);
        System.out.println(student);
    }
}

运行结果:

Class Student: 1
Class Student: 2


(2)子类:

package protecteddemo;

public class Student extends People {
    private int sno;
    public Student(String name, int sno){
        super(name);
        this.sno = sno;
    }
    public void change(String name, int sno){
        setName(name);
        this.sno = sno;
    }
    public String toString(){
        return "Class Student: " + sno + " " + super.toString();
    }
    public static void main(String[] args){
        Student student = new Student("huhu", 1);
        System.out.println(student);
        student.change("huahua", 2);
        System.out.println(student);
    }
}

运行结果:

Class Student: 1 Class People: huhu
Class Student: 2 Class People: huahua


2.不同包的其他类(只有People的子类可以访问People的protected成员):

(1)非子类(编译报错):

package protecteddemo2;
import protecteddemo.People;
public class Student{
    private int sno;
    public Student(String name, int sno){
        this.sno = sno;
    }
    public void change(String name, int sno){
        // 报错:setName(java.lang.String)具有protected访问权限,不可以protecteddemo2包中访问
        new People("huhu").setName(name);
        this.sno = sno;
    }
    public String toString(){
        return "Class Student: " + sno + " ";
    }
    public static void main(String[] args){
        Student student = new Student("huhu", 1);
        System.out.println(student);
        student.change("huahua", 2);
        System.out.println(student);
    }
}


(2)子类:

package protecteddemo2;
import protecteddemo.People;
public class Student extends People {
    private int sno;
    public Student(String name, int sno){
        super(name);
        this.sno = sno;
    }
    public void change(String name, int sno){
        setName(name);
        this.sno = sno;
    }
    public String toString(){
        return "Class Student: " + sno + " " + super.toString();
    }
    public static void main(String[] args){
        Student student = new Student("huhu", 1);
        System.out.println(student);
        student.change("huahua", 2);
        System.out.println(student);
    }
}

运行结果:

Class Student: 1 Class People: huhu
Class Student: 2 Class People: huahua


© 著作权归作者所有

共有 人打赏支持
粉丝 10
博文 25
码字总数 38957
作品 0
武汉
私信 提问
小朋友学C++(4):public, protected, private

面向对象有三大特征:封装、继承、多态。(具体会在之后的课程里讲) C++用三个关键词来表示访问范围:public, protected, private。 public和private作用就是实现封装。类外的代码可以访问p...

海天一树X
03/27
0
0
Java public ,protect,friendly,private的方法权限

Java中的访问权限有public,private,protected和默认的包访问权限,如果类中的属性方法没有显示的指明访问权限,则具有包访问权限,可称它为packeged权限,很多人也称它为friendly访问权限,而...

weiliu007
2016/09/09
12
0
面向对象的封装

面向对象的封装 private 私有的 私有的属性不能直接在外面访问 protected 受保护的 受保护的属性 不能直接在外面访问 set($key,$value) $key--->没有权限赋值的属性名 $value 没有权限赋值的...

方花
2017/11/16
0
0
PHP基础巩固(六) 类

一、魔术方法set和get 二、魔术方法isset、unset 三、关键字extends 用于类的继承,不多说 四、public、protected、private 公开的、受保护的、私有的 公开情况下,类内部,子类,类外部,都...

高能狂犬
2016/09/09
10
0
C# internal关键字

我是编程的“空降部队”,一开始就深入项目,研究项目,项目有需要就去学习,所以对于很多基础知识都不是很扎实。但是基础知识是编程的桥梁,没有桥梁就别想盖高楼大厦。所以,我在今后的学习...

海灬未眠
2016/11/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 你一口我一口多咬一口是小狗

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文 :分享Roy Orbison的单曲《She's a Mystery to Me》 《She's a Mystery to Me》- Roy Orbison 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
82
4
Spring源码学习笔记-1-Resource

打算补下基础,学习下Spring源码,参考书籍是《Spring源码深度解析》,使用版本是Spring 3.2.x,本来想试图用脑图记录的,发现代码部分不好贴,还是作罢,这里只大略记录下想法,不写太细了 ...

zypy333
今天
12
0
RestClientUtil和ConfigRestClientUtil区别说明

RestClientUtil directly executes the DSL defined in the code. ConfigRestClientUtil gets the DSL defined in the configuration file by the DSL name and executes it. RestClientUtil......

bboss
今天
21
0

中国龙-扬科
昨天
4
0
Linux系统设置全局的默认网络代理

更改全局配置文件/etc/profile all_proxy="all_proxy=socks://rahowviahva.ml:80/"ftp_proxy="ftp_proxy=http://rahowviahva.ml:80/"http_proxy="http_proxy=http://rahowviahva.ml:80/"......

临江仙卜算子
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部