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 ...
随机推荐
- python使用sql批量插入数据+查看执行的语句+动态sql创建表+动态创建索引
class Test(): cursor = connection.cursor() data_to_insert = [] sql = "INSERT INTO test_t (id, n ...
- 二、mongo集群搭建
系列导航 一.linux单机版mongo安装(带密码验证) 二.mongo集群搭建 三.java连接mongo数据库 四.java对mongo数据库增删改查操作 五.mongo备份篇 mongoexp ...
- 【新手友好】用Pyspark和GraphX解析复杂网络数据
从零开始 在本文中,我们将详细介绍如何在Python / pyspark环境中使用graphx进行图计算.GraphX是Spark提供的图计算API,它提供了一套强大的工具,用于处理和分析大规模的图数 ...
- 项目API请求模块封装
- Vue项目实现导入导出Excel表格功能
前提:在我的项目中我使用的是ElementUi前端UI框架,用到的是里面的Upload上传组件. 第一步:需要安装三个依赖 npm install -S file-saver xlsx (这里其实安 ...
- Spring Boot 中使用Caffeine缓存的简单例子
Caffeine 缓存是 Java 的高性能缓存库.本文简单记录下 Caffeine 缓存的用法. 依赖配置 <dependencies> <dependency> <g ...
- 07-verilog & sytem verilog
一.数据类型 二值逻辑变量 bit 不赋值的时候,变量初始默认为0 x或z的值会转变为0 bit vector--bit矢量 bit [msb,lsb] variable_name = [initia ...
- JQuery - CheckBox Prop 和 attr 的区别
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [转帖]KVM调整磁盘大小
https://www.jianshu.com/p/5ca598424eb9 一台win10的虚拟机磁盘空间不足了,需要调整磁盘的大小.上网搜索KVM调整磁盘大小,结果得出的博客都说只有raw格式的能 ...
- 【转帖】MySQL索引
数据表如何用索引快速查找 索引是 排好序的快速查找的数据结构 索引存储在文件系统中 索引的文件存储形式与存储引擎有关 索引数据结构:可以是二叉树.红黑树.Hash表.B-Tree.B+Tree 1.二 ...