public private protected 的辨析
一. public
1.作为类内成员的访问修饰符时,由public修饰的成员数据或者成员函数可以在类外(即派生类内以及实例化的对象后)以及类内进行随意访问

可以看到public成员Data在类外是可访问的(同理也可修改),但是private成员Private_Data在类外是无法看到访问的。
2.在pubilc作为修饰符的派生类中,不改变基类中成员在派生类中的访问权限,即原先是什么,在派生类中对外依旧是什么

基类中作为公有成员的Data在派生类中是完全可以访问到的,而对基类中私有成员的Private_Data的访问是非法的,会报错。
注意,这里基类中的成员访问修饰符与继承时的修饰符要区分开
继承修饰符仅改变基类成员在派生类中对外的访问权限,而不是改变基类成员对于派生类的访问权限。
换言之,以public继承为例,基类中的private成员在继承后的派生类中仍然是private的,也就是对于派生类外无法访问,同时对于派生类内,由于该成员在基类中也是private的,故基类也无法直接方位该成员
而对于private继承,基类中所有成员的修饰符在派生类外都被视为private(即基类中的pubilc,private以及protected成员在派生类外都无法访问),但是在派生类内对于基类成员的访问依然由基类成员的修饰符来决定,与继承类型无关
也就是说,类内的成员修饰符决定类内成员对外(实例化的对象以及派生类)的访问权限,而类继承时的修饰符决定继承来的基类成员在派生类中对外的访问权限
二,private
1.作为成员访问修饰符时,使用private修饰的成员仅可被类内方法以及类的友元函数来访问,对于类外是无法访问到的。详情也可见上图。
2.作为继承类型修饰时,private继承会使得基类中的所有类型(public,private,protected)在派生类中的对外访问权限都变为private,即在派生类外无法访问。

Test_kids是上述Test类的一个派生类,采用私有继承而来,可以看到在Test-kids内可以访问原先是public的Data,但是由于采用私有继承,其对外是私有的,因此Test_kids的一个对象T无法访问到Data。
三,protected
1.作为成员访问修饰符时,使用protected修饰的成员对于类外拥有两种不同的访问权限,对于派生类,protected成员同public成员一样可以访问,而对于实例化对象中,无法访问protected修饰的成员,此时类似于private,这样可以较好的实现对成员的保护,而且方便继承后对成员的直接访问使用

如上图,成员Protected_Data是由protected修饰的,可以看到Test类的成员test是无法访问的

而作为Test类的派生的Test_kids却可以访问Protected_Data。
2.作为继承类型修饰时,protected继承后,基类中的public,protected类型在派生类外的访问权限会变为protected,基类中的private类型在派生类外的访问权限仍然为private
四,最后用个表格来总结一下
|
修饰符 ----------- 访问权限 |
public | private | protected |
| 类内 | 可 | 可 | 可 |
| 对象中 | 可 | 不可 | 不可 |
| 派生类中 | 可 | 不可 | 可 |
| private继承后对外 | private | private | private |
| public继承后对外 | public | private | protected |
| protected继承后对外 | protected | private | protected |
public private protected 的辨析的更多相关文章
- public/private/protected访问控制权限的区别
//public/private/protected访问控制权限的区别//时间:2016/8/16 //(一)修饰成员: //public: 在类内.类外都能使用 . //protected: 在类内 ...
- Java中public,private,protected,和默认的区别
Java中public,private,protected,和默认的区别 1.private修饰词,表示成员是私有的,只有自身可以访问: 2.protected,表示受保护权限,体现在继承,即子类可以 ...
- 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)
访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...
- public private protected和默认的区别(转自百度)
public private protected和默认的区别 Java中对类以及类中的成员变量和成员方法通过访问控制符(access specifier)进行区分控制.刚学Java语言的同学可能对pu ...
- php class中public,private,protected的区别,以及实例
一,public,private,protected的区别 public:权限是最大的,可以内部调用,实例调用等. protected: 受保护类型,用于本类和继承类调用. private: 私有类型 ...
- public,private,protected的区别
一,public,private,protected的区别public:权限是最大的,可以内部调用,实例调用等.protected: 受保护类型,用于本类和继承类调用.private: 私有类型,只有 ...
- 访问权限系列一(public/private/protected/default):成员变量
通过两个程序包对自身或互相之间的访问,得到结果.(先编译Test_01,得到class文件,通过Test的集中访问情况) 如下Test.java中内容: package com.java; /* * ...
- PHP中public,private,protected,abstract等关键字用法详解
PHP中常用的关键字 在PHP中包含了很多对函数和类进行限制的关键字,常用的通常有abstract,final,interface,public,protected,private,static等等, ...
- public private protected default
public private protected default 这几个限定访问控制符只是在编译阶段起作用,在运行阶段不起作用 private修饰符 , 本类可以访问 default修饰符 , 本类, ...
- PHP中const,static,public,private,protected的区别
原文地址:http://small.aiweimeng.top/index.php/archives/54.html const: 定义常量,一般定义后不可改变static: 静态,类名可以访问pub ...
随机推荐
- 聚焦业务价值:分众传媒在 Serverless 上的探索和实践
作者 | 吴松(分众传媒研发总监) **关注 Serverless 公众号后台回复 分众 即可获得云原生峰会 PPT! ** 本文总结于分众传媒研发总监吴松在阿里云云原生实战峰会上的分享,从三个方面详 ...
- freeswitch隐藏fs标识
概述 freeswitch是一款好用的开源软交换平台. fs的默认配置环境下,sip消息中有很多freeswitch的标识,比如"user-agent","contact ...
- Spring boot 自定义ThreadPoolTaskExecutor 线程池并进行异步操作
本文为博主原创,转载请注明出处: 1. 使用 ThreadPoolTaskExecutor 封装自定义配置的线程池Bean ThreadPoolTaskExecutor 是Spring 中封装的一个 ...
- 神经网络优化篇:详解学习率衰减(Learning rate decay)
学习率衰减 加快学习算法的一个办法就是随时间慢慢减少学习率,将之称为学习率衰减,来看看如何做到,首先通过一个例子看看,为什么要计算学习率衰减. 假设要使用mini-batch梯度下降法,mini-ba ...
- vscode - Prettier插件 统一代码风格规范,保存自动格式化代码
安装 Prettier - Code formatter prettier安装完毕,使用shift+alt+f就可格式化代码. 如果需要自动保存,要在系统设置中增加"editor.forma ...
- Shell-表达式-比较-文件判断-权限判断-条件-逻辑
- UofTCTF 2024 比赛记录
这次的题目挺有意思,难度适中,*开头的代表未做出,简单记录一下解题笔记. Introduction General Information 题目 The flag format for all cha ...
- [转帖]hex,base64,urlencode编码方案对比
https://www.jianshu.com/p/4d701c09d44e 原创:打码日记,欢迎分享,转载请保留出处. 简介 在工作过程中,我们慢慢会了解到hex.base64.urlencode这 ...
- [转帖]Linux性能调优之内存负载调优的一些笔记
https://zhuanlan.zhihu.com/p/548770928 写在前面 整理一些Linux内存调优的笔记,分享给小伙伴 博文没有涉及的Demo,理论方法偏多,可以用作内存调优入门 博文 ...
- 金蝶Cosmic虚拟机简单使用与总结
背景 知己知彼 简单学习下友商发出来的测试软件 看看有否对自己现在的工作有所指导 也看看对方的部署方式有啥优缺点 当然了仅是测试, 不是生产软件可能有失真. 注意 我没有测试序列号, 登录系统耗时很久 ...