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 ...
随机推荐
- 一、Mycat实战---为什么要用mycat
系列导航 一.Mycat实战---为什么要用mycat 二.Mycat安装 三.mycat实验数据 四.mycat垂直分库 五.mycat水平分库 六.mycat全局自增 七.mycat-ER分片 本 ...
- 【调试】kprobes(二)使用方法
前言 上一节介绍了kprobe的基本概念,下面我们将使用几个具体的例子,看下kprobe在实际使用中有那些应用场景. kprobe 内核的samples/kprobe目录下有kprobe相关的例子,我 ...
- Liunx常用操作(十)-VI编辑器-命令模式命令
vI编辑器三种模式 分别为命令模式.输入模式.末行模式.
- 搬运 |(有刀🔪慎入)kwdnx、谷雨、更漏与我
本打算把文案投到官微,但官微说文案太长了,只能放删减版: 那就把文案放博客上吧 写于 癸卯年 戊午月 己亥日. 四年前的冬天我们初见,大家都是青涩的未成年人:在少年班团建的喧闹中,谷雨谈论高数竞赛,k ...
- 【荐】开源Winform控件库:花木兰控件库
微信好友推荐,挺好看的Winfrom控件库,下面来看看. 介绍 基于 C#(语言) 4.0 . VS2019 . Net Framework 4.0(不包括Net Framework 4.0 Clie ...
- Linux-服务管理-service-checkconfig
- [转帖]Unicode标准中定义的3个私有使用区域-一个基本区域+两个补充区域
Unicode私有使用区域 目录 1.概述 2.Unicode标准中的描述 2.1.基本多语言平面的私有区域 2.2.补充私有区域 2.3.私有区域位置 3.实际测试 3.1.测试代码 3.2.测试结 ...
- [转帖]使用 Grafana 监控 TiDB 的最佳实践
https://docs.pingcap.com/zh/tidb/stable/grafana-monitor-best-practices 使用 TiUP 部署 TiDB 集群时,如果在拓扑配置中添 ...
- [转帖]深入理解mysql-第五章 InnoDB记录存储结构-页结构
前言: 页是InnoDB管理存储空间的基本单位,上一章我们主要分析了页中的主要的构成行的存储结构-行格式,其中简单提了一下页的概念.这章我们详细讲解一下页的存储结构. 一.数据页结构 前边我们简单提了 ...
- [转帖]探索惊群 ④ - nginx - accept_mutex
https://wenfh2020.com/2021/10/10/nginx-thundering-herd-accept-mutex/ 由主进程创建的 listen socket,要被 fork ...