一. 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 的辨析的更多相关文章

  1. public/private/protected访问控制权限的区别

    //public/private/protected访问控制权限的区别//时间:2016/8/16 //(一)修饰成员: //public: 在类内.类外都能使用 . //protected: 在类内 ...

  2. Java中public,private,protected,和默认的区别

    Java中public,private,protected,和默认的区别 1.private修饰词,表示成员是私有的,只有自身可以访问: 2.protected,表示受保护权限,体现在继承,即子类可以 ...

  3. 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

    访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...

  4. public private protected和默认的区别(转自百度)

    public private protected和默认的区别 Java中对类以及类中的成员变量和成员方法通过访问控制符(access specifier)进行区分控制.刚学Java语言的同学可能对pu ...

  5. php class中public,private,protected的区别,以及实例

    一,public,private,protected的区别 public:权限是最大的,可以内部调用,实例调用等. protected: 受保护类型,用于本类和继承类调用. private: 私有类型 ...

  6. public,private,protected的区别

    一,public,private,protected的区别public:权限是最大的,可以内部调用,实例调用等.protected: 受保护类型,用于本类和继承类调用.private: 私有类型,只有 ...

  7. 访问权限系列一(public/private/protected/default):成员变量

    通过两个程序包对自身或互相之间的访问,得到结果.(先编译Test_01,得到class文件,通过Test的集中访问情况) 如下Test.java中内容: package com.java; /* * ...

  8. PHP中public,private,protected,abstract等关键字用法详解

    PHP中常用的关键字 在PHP中包含了很多对函数和类进行限制的关键字,常用的通常有abstract,final,interface,public,protected,private,static等等, ...

  9. public private protected default

    public private protected default 这几个限定访问控制符只是在编译阶段起作用,在运行阶段不起作用 private修饰符 , 本类可以访问 default修饰符 , 本类, ...

  10. PHP中const,static,public,private,protected的区别

    原文地址:http://small.aiweimeng.top/index.php/archives/54.html const: 定义常量,一般定义后不可改变static: 静态,类名可以访问pub ...

随机推荐

  1. java两个list取交集

    直接上代码 List<Integer> list1 = new ArrayList<>(); list1.add(1); list1.add(2); list1.add(3); ...

  2. 二、docker的安装和镜像管理

    系列导航 一.docker入门(概念) 二.docker的安装和镜像管理 三.docker容器的常用命令 四.容器的网络访问 五.容器端口转发 六.docker数据卷 七.手动制作docker镜像 八 ...

  3. Element 动态表头渲染表格

    element 中的table表头动态渲染 https://blog.csdn.net/heixiuheixiu666/article/details/104705024/ Element 动态表头渲 ...

  4. Go 汇编学习笔记

    0.前言 学习 Go 离不开看源码,源码又包含大量汇编代码,离开汇编是学不好 Go 的.同样,离开汇编去学习计算机是不完整的,汇编是基石,是离操作系统和硬件最近的一层. 虽然之前学过一点 Go 汇编, ...

  5. idea开发常用快捷键总结

    转载请注明出处: idea提供了很多的快捷键,但在开发过程中并发全用,只是常用部分快捷键,在这里总结一下,总结的不全,有好的快捷键可在评论里补充下,提前谢各位 由于很早之前用的eclipse或spri ...

  6. 基于html5+javascript技术开发的房贷利率计算器,买房的码农们戳进来

    房贷计算器是一款专为购房者设计的实用工具应用,其主要功能是帮助用户详细计算房贷的还款金额.利息以及还款计划等.通过这款软件,用户可以更加便捷地了解到自己的还款情况和计划,从而更好地规划自己的财务.下面 ...

  7. Angular系列教程之变更检测与性能优化

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  8. [转帖]Linux内存之Cache

    一. Linux内存之Cache 1.1.Cache 1.1.1.什么是Cache? Cache存储器,是位于CPU和主存储器DRAM之间的一块高速缓冲存储器,规模较小,但是速度很快,通常由SRAM( ...

  9. [转帖]CoreDNS loop 插件异常问题

    https://zhuanlan.zhihu.com/p/476611162   背景 最近有遇到一个客户集群,发现集群中的 CoreDNS 老是异常 (loop 插件检测到有回路后进行 panic) ...

  10. [转帖]Jmeter笔记:使用Jmeter向kafka发送消息

    https://www.cnblogs.com/daydayup-lin/p/14124816.html 日常工作中有时候需要向kafka中发送消息来测试功能或者性能,这时候我们怎么办呢?我之前是自己 ...