文档章节

protected关键字

 恒者
发布于 2013/12/30 12:54
字数 528
阅读 24
收藏 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
C# internal关键字

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

海灬未眠
2016/11/14
0
0
c++学习笔记--protected成员

class Actor { string _name; bool _gender; public: ...... } class Monk:public Actor { public: patter(); } void Monk::patter() { cout<...

晨曦之光
2012/05/23
175
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

流量劫持是如何产生的?

流量劫持,这种古老的攻击沉寂了一段时间后,最近又开始闹的沸沸扬扬。众多知名品牌的路由器相继爆出存在安全漏洞,引来国内媒体纷纷报道。只要用户没改默认密码,打开一个网页甚至帖子,路由...

谢思华
19分钟前
0
0
Hadoop Client无法使用maven下载源码

最近在学习hadoop,使用maven的时候想看一下源码的注释,结果IDEA一直提示无法下载 搞得我一度以为maven坏掉了。 但是通过搜索,发现在maven仓库里确实没有源码.... 而2.8.1以及之前的版本是...

Iceberg_XTY
21分钟前
0
0
为什么程序员千万不要重写代码?

你所做的事情,也许暂时看不到成果,但不要灰心或焦虑,你不是没有成长,而是在扎根。 图片来自网络 0 前言 程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的...

Java小铺
22分钟前
0
0
VUE集成AdminLte

1. 安装需要到插件 npm i admin-lte -Snpm i jquery -Snpm i axios -Snpm i vue-router -S 2. 配置webpack.config.js 2.1 module.exports.module.rules修改字体loader: {test: /\.(p......

Pasenger
今天
0
0
Spring Aop原理之切点表达式解析

在前面的文章(Spring AOP切点表达式详解)中,我们总结了Spring Aop切点表达式的用法,而在上文(Spring Aop原理之Advisor过滤)中我们讲到,切点表达式的解析主要是在PatternParser.parse...

爱宝贝丶
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部