文档章节

protected关键字

 恒者
发布于 2013/12/30 12:54
字数 528
阅读 24
收藏 0
点赞 0
评论 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

Java public ,protect,friendly,private的方法权限

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

weiliu007 ⋅ 2016/09/09 ⋅ 0

面向对象的封装

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

方花 ⋅ 2017/11/16 ⋅ 0

C# internal关键字

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

海灬未眠 ⋅ 2016/11/14 ⋅ 0

java keyword 作用域

java作用域public ,private ,protected 及不写时的区别 在说明这四个关键字之前,我想就class之间的关系做一个简单的定义,对于继承自己的class,base class可以认为他们都是自己的子女,而对...

Simon253 ⋅ 2014/03/12 ⋅ 0

c++学习笔记--protected成员

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

晨曦之光 ⋅ 2012/05/23 ⋅ 0

java的访问控制权限(public,private,protected,不写)

java作用域public ,private ,protected 及不写时的区别 在说明这四个关键字之前,我想就class之间的关系做一个简单的定义,对于继承自己的class,base class可以认为他们都是自己的子女,而对...

整理秀逗的脑袋 ⋅ 2011/12/28 ⋅ 0

PHP基础巩固(六) 类

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

高能狂犬 ⋅ 2016/09/09 ⋅ 0

PHP类和对象

1、定义和创建类和对象: 定义类要使用class关键字。例如:class 类名{//属性和方法} 创建对象使用new关键字。例如: $p1 = new 类名;,可以基于一个类创建多个对象。 2、 类属性值 (1...

雪之丞 ⋅ 2014/01/03 ⋅ 0

PHP 一种访问私有属性的方法

在鸟哥《深入理解PHP原理之对象(一)》看到一段挺有意思的代码 <?phpclass Foo { }$foo = new Foo();$arr = (array) $foo;vardump($arr["0Foo0name"]);vardump($arr["0*0age"]);//output:str......

solu ⋅ 2014/05/10 ⋅ 1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

R计算IV

参考文章 #读取文件 rawdata = read.csv("/path/to/csv/file",header=T) colnames(rawdata)[18] <- "y" //重命名因变量y #数据分区 训练集测试集 trainIdx <- sample(nrow(rawdata), round(......

火力全開 ⋅ 12分钟前 ⋅ 0

SQL老司机,在SQL中计算 array & map & json数据

摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据。 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primi...

阿里云云栖社区 ⋅ 12分钟前 ⋅ 0

SQL老司机,在SQL中计算 array & map & json数据

摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据。 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primi...

猫耳m ⋅ 23分钟前 ⋅ 0

关于ireport自定义变量类型为list的时候

自己摸石头过河,我真的应该去趟市中心图书馆,借本真正靠谱的教材 网上的东西,只有0.01%是有用的,还有0.99%是垃圾,剩下的99%是垃圾的复制品。。 哎!~ 问题是这样的,报表带sql,从db中获...

炑炑milina ⋅ 24分钟前 ⋅ 0

Spring mvc ContextLoaderListener 原理解析

对于熟悉Spring MVC功能,首先应从web.xml 开始,在web.xml 文件中我们需要配置一个监听器 ContextLoaderListener,如下。 <!-- 加载spring上下文信息,最主要的功能是解析applicationContex...

轨迹_ ⋅ 24分钟前 ⋅ 0

阿里云发布企业数字化及上云外包平台服务:阿里云众包平台

摘要: 阿里云正式发布旗下众包平台业务(网址:https://zhongbao.aliyun.com/),支持包括:网站定制开发,APP、电商系统等软件开发,商标、商品LOGO、VI、产品包装设计、营销推广、大数据人...

阿里云官方博客 ⋅ 26分钟前 ⋅ 0

Redis安装异常解决办法

官网地址:http://redis.io/ 官网下载地址:http://redis.io/download 1. 下载Redis源码(tar.gz),并上传到Linux 2. 解压缩包:tar zxvf redis-2.8.17.tar.gz 3. 进入解压缩后的文件夹:c...

slagga ⋅ 30分钟前 ⋅ 0

006. 深入JVM学习—年轻代

1. 年轻代图片 年轻代(Young)属于JVM堆内存空间的一个组成部分 所有使用关键字new新实例化的对象一定会在伊甸园区进行保存,而对于存活区保存的一定是已经在伊甸园区存在一段时间并且经过了...

影狼 ⋅ 31分钟前 ⋅ 0

如何成为一个合格的程序员

偶尔的,我会被人问道:如何成为一名优秀的程序员,更或者,如何成为一名程序员。每次人们问起,我都力图给出不同的答案。因此,我的答案是各种各样的。下面就是我认为的成为一名优秀的程序员...

柳猫 ⋅ 32分钟前 ⋅ 0

cups error_log日志暴增

日志内容 File \"/usr/lib/cups/notifier/dbus\" has insecure permissions 解决(未验证适用范围) sudo service cups stopsudo rm /etc/cups/subscriptions.conf*sudo rm -r /var/cac......

一介码夫_Hum ⋅ 36分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部