02-25类成员的访问权限

面向对象编程的一大特性就是可以控制类成员的可访问性。当前主流的面向对象语言都拥有以下三种基本的可访问性。

1)公有:public 访问不受限制

2)私有:private 只有类自身成员可访问

3)保护:protected 子类可以访问,其他类无法访问

(1)public和private

public和private主要用于单个类的成员存取权限。

1 class A
2     {
3         public int publicI;
4         private int privateI;
5         protected int protectedI;
6     }

当外界创建一个A的对象时,之恩个访问A的公有实例字段publicI;

1  A a = new A();
2  a.publicI = 100;//OK;

类A的私有实例字段privateI只能被自身的实例方法所使用:

 1 public  class A
 2     {
 3         public int publicI;
 4         private int privateI;
 5         protected int protectedI;
 6         private void f()
 7         {
 8             privateI = 100;//OK
 9         }
10     }

上述代码中,类A的私有方法f()访问了私有字段privateI.注意:只要是类A直接定义的实例方法,不管他是公有的还是私有的,都可以访问类自身的私有实例方法。

(2)protected

在形成继承关系的两个类之间,可以定义一种扩充权限--protected;

当一个类成员被定义为protected之后,所有外界类都不可以访问它,但其子类可以访问它。

以下详细说明子类可以访问父类的哪些部分:

 1 class Parent   //父类
 2     {
 3         public int publicF=0;
 4         private int privateF=0;
 5         protected int protectedf=0;
 6         protected void protectedFunc()
 7         {
 8
 9         }
10     }
11     class Child : Parent
12     {
13
14         public void ChildFunc()
15         {
16             publicF = 100;//正确,子类可以访问父类的公有字段
17             privateF = 200;//错误,子类不嗯能够访问父类的私有字段
18             protectedf = 300;//正确,子类可以访问父类的保护方法
19             protectedFunc();//正确,子类能访问父类的保护方法
20         }
21     }

当创建子类对象后,外界可以访问子类的公有成员和父类公有成员,如下所示:

1             Child obj = new Child();
2             //可以调用子类的公有方法
3             obj.ChildFunc();
4             //可以访问父类的公有字段
5             obj.publicF = 1000;

由此可见,可以通过子类对象访问其父类的所有公有成员,事实上,外界根本分不清对象的哪些公有成员来自父类,哪些公有成员来自子类本身。

总结:

  • 所有不必让人知道的东西都是私有的;
  • 所有需要向外提供的服务都是公有的;
  • 所有的“祖传秘诀”,“密不外传”的都是受保护的;
时间: 2024-10-16 19:52:49

02-25类成员的访问权限的相关文章

Java类和类成员的访问权限修饰符

一:访问修饰符: 1.省略访问修饰符 具有默认的访问特性,即具有包访问特性,只能被同一个包中的类使用. 2.public访问修饰符 用于说明类和类的成员的访问权限.这种类叫公有类.在一个文件中只能有一个public类型的类. 例如:Rect和UseImport两个类,分别在两个不同的包中.顺便回顾一下不同类要用import导入.(哎,一直就没记住) //Rect.java pacakage my; public class Rect { private int a,b; public void

02-25 类成员的访问权限--internal

C#中还有一种可访问性,就是由关键字internal所确定的“内部”访问性: internal有点像public,外界类也可以直接访问声明为internal的类或类的成员,但这只局限于同一个程序集内部. 可以简单的将程序集理解为一个独立的.DLL或者.EXE 的文件,一个Dll或Exe文件中可以有多个类,如果某个类可被同一程序集中的类访问,但其他程序集中的类不能访问它,则称此类具有internal访问性. 例如某个类库项目可以生成一个独立的程序集(假定程序编译后生成.DLL结尾的文件),其中定义

Java成员的访问权限控制

Java中的访问权限控制包含两个部分: 类的访问权限控制 类成员的访问权限控制 对类来说,访问权限控制修饰符可以是public或者无修饰符(默认的包访问权限): 对于类成员来说,访问权限控制修饰符可以是public,protected, package private(无修饰符), or private. 以下表格总结了类成员中不同访问权限控制修饰符对应的访问级别:

C++类中的访问权限问题

C++类中的访问权限问题 引用http://www.cnblogs.com/dongsheng/p/3344011.html 纠结的东西: private,public,protected方法的访问范围.(public继承下)private: 只能由该类中的函数.其友元函数访问,不能被任何其他访问,该类的对象也不能访问. protected: 可以被该类中的函数.子类的函数.以及其友元函数访问,但不能被该类的对象访问 public: 可以被该类中的函数.子类的函数.其友元函数访问,也可以由该类的

成员方法与成员变量访问权限的求证

package com.jaovo; /** *_1_ 成员变量访问权限的求证 * public private protected default(默认的权限) *自己包自己类 可访问 可访问 可访问 可访问 *自己包别的类 可访问 不可访问 可访问 可访问 *别的包别的类 可访问 不可访问 不可访问 不可访问 *自己包别的类有继承关系 可访问 不可访问 可访问 可访问 *别的包别的类有继承关系 可访问 不可访问 可访问 不可访问 *------------------------------

Delphi XE中类成员的访问权限(新增了strict private和strict protected,还有automated)

Delphi XE中类成员的访问权限共提供了6个关键词来用于限定访问权限:public.private.protected.published.automated strict private . strict protected其各自的含义为: 1. strict private:此区定义的字段或方法只能用于当前的类中.即T1中此区定义的成员只能在T1中使用.2. strict protected:此区定义的成员除能用于当前类中,还可用于当前类的任何子类中. 以上两种成员,同一个类的不同对象间

JAVA---类成员的访问权限

对类的成员变量和成员方法而言,其应用范围可以通过施以一定的访问权限来限定. 修饰符  同一个类中 同一个包中 不同包中的子类 不同包中的非子类  private  ★        default  ★  ★      protected  ★  ★  ★    public  ★  ★  ★  ★ main方法所在的类的名字必须和文件名相同:main方法使用public便于java解析器访问:使用static表明无需创建对象直接由类来访问. JAVA---类成员的访问权限

C++的继承操作---基类指针访问派生类问题---基类成员恢复访问属性问题

#include "stdafx.h" #include <iostream> #include <algorithm> using namespace std; class Base { public: int num; virtual void func() { cout<<"Do something in Base"<<endl; } }; class Derived:private Base { public:

python-面向对象(四)——类成员的访问方式汇总

类成员的访问方式 #!/usr/bin/env python # _*_coding:utf-8 _*_ class pepole(object): '''This is __doc__ information!!!''' country = "CHINA" #静态字段 存在类里 __city = "BeiJing" #私有静态字段 def siyou(self): #私有字段在内部设置方法可以访问 return pepole.__city def __init__