zoukankan      html  css  js  c++  java
  • 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;

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

    总结:

    • 所有不必让人知道的东西都是私有的;
    • 所有需要向外提供的服务都是公有的;
    • 所有的“祖传秘诀”,“密不外传”的都是受保护的;
  • 相关阅读:
    Hibernate + mysql 查询伪劣时:= 出现 Space is not allowed after parameter prefix ':' MySQL异常
    Linux下使用Markdown
    第十六章:Java内存模型——Java并发编程实战
    第十五章:原子变量与非阻塞机制——Java并发编程实战
    第十四章:构建自定义的同步工具——Java并发编程实战
    第十三章:显示锁——Java并发编程实战
    访问者模式——HeadFirst设计模式学习笔记
    原型模式——HeadFirst设计模式学习笔记
    第十二章:并发程序的测试——Java并发编程实战
    备忘录模式——HeadFirst设计模式学习笔记
  • 原文地址:https://www.cnblogs.com/xiaoqingshe/p/4300281.html
Copyright © 2011-2022 走看看