`
perfect5085
  • 浏览: 269560 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 访问控制符 protected,以及命名空间 妙用

 
阅读更多

在JAVA中,如果一个类,方法,属性被设置成protected,表明只能在子类或者同一个命名空间中才能使用,但我们可以巧妙的利用特殊的编码方式,在其他的命名空间下,创造同一个命名空间,从而访问 protected 代表的类,方法,属性。

举例,定义一个Person类,注意:address 是protected static 

 

package test;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

public class Person {

    {
        System.out.println("instance 1");
        System.out.println(toString());
    }

    static {
        System.out.println("static 1");
    }

    private String          privateName         = "privateName";

    protected String        protectedName       = "protectedName";

    String                  friendlyName        = "friendlyName";

    public String           publicName          = "publicName";

    private static String   privateStaticName   = "privateStaticName";

    protected static String protectedStaticName = "protectedStaticName";

    static String           friendlyStaticName  = "friendlyStaticName";

    public static String    publicStaticName    = "publicStaticName";

    public Person() {
        System.out.println("no name");
    }

    public Person(String name) {
        System.out.println("my name is " + name);

        System.out.println(toString());
        this.privateName = name;
        System.out.println(toString());
    }

    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
        .append("privateName", privateName)
        .append("protectedName",protectedName)
        .append("friendlyName",friendlyName)
        .append("publicName",publicName)
        .append("privateStaticName",privateStaticName)
        .append("protectedStaticName",protectedStaticName)
        .append("friendlyStaticName",friendlyStaticName)
        .append("publicStaticName",publicStaticName).toString();
    }

    {
        System.out.println("instance 2");
        System.out.println(toString());
    }

    static {
        System.out.println("static 2");

    }
}

 

利用new Person()制造命名空间:

package test;

public class PersonTest {

    public static void main(String[] args) {

        Person person = new Person("bob") {

            {
                System.out.println("outside");
            }

            public void cut() {
                System.out.println("cut");
            }

            {
                publicName = "newPublicName";
                protectedName = "newProtectedName";
                friendlyName = "newFriendlyName";

                publicStaticName = "newPublicStaticName";
                protectedStaticName = "newProtectedStaticName";
                friendlyStaticName = "newFriendlyStaticName";

                cut();

                System.out.println(toString());
            }

        };

        System.out.println(person.toString());

    }
}
分享到:
评论

相关推荐

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    10.1.1 饭前水果:实例变量的访问控制符 237 10.1.2 一切还是从汽车开始 238 10.1.3 一类车,一个类 241 10.1.4 分开也有麻烦 244 10.1.5 使用继承——问题迎刃而解 245 10.1.6 使用Bus类 248 10.1.7 Java中的...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    10.1.1 饭前水果:实例变量的访问控制符 237 10.1.2 一切还是从汽车开始 238 10.1.3 一类车,一个类 241 10.1.4 分开也有麻烦 244 10.1.5 使用继承——问题迎刃而解 245 10.1.6 使用Bus类 248 10.1.7 Java中的...

    AIC的Java课程1-6章

     掌握访问控制符protected。  明白super关键字的两种用法。  弄清构造函数和终结方法在继承层次结构中的调用顺序,强调子类必须调用超类的构造函数分配空间和初始化超类数据。  掌握方法重写...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    其它对象对它的访问,访问权限所以有以下几种:private, protected, public, friendly。 1.8.2 对象 把类实例化,我们可以生成多个对象,这些对象通过消息传递来进行交互(消息 传递即激活指定的某个对象的方法以改变...

    java面试800题

    synchronized:控制多个并发线程对共享数据的访问 throwsException:异常处理" Q0044 this&super的异同 "this :引用当前对象 super:引用当前对象的父类 使用情况: (1) super.variable //用来访问父类被隐藏的...

    21天学通Java-由浅入深

    117 6.10 小结 118 6.11 习题 118 第7章 控制逻辑(精彩视频:50分钟) 120 7.1 包(package) 120 7.1.1 创建一个包 120 7.1.2 如何使用包 121 7.1.3 什么是静态引入 122 7.2 类的访问级别 123 7.2.1 公开的访问...

    java 面试题 总结

    为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每...

    java二八杠源码-java-II-notes:java-II-notes

    有两个级别的访问控制 顶级(公共或包私有) 成员级别(公共、私有、受保护或包私有) 如果未指定访问修饰符,则始终默认为 package-private。 所以: 如果一个类没有被声明为 public,它只在它的包中可见。 否则从...

    【04-面向对象(上)】

    使用访问控制符 •private 私有的。在同一个类里能被访问。 •default 默认的。包访问权限 •protected 受保护的。子类中也能访问 •public 公共的。在任何地方都可以访问 package 和 import •...

    Visual C#2010 从入门到精通(Visual.C#.2010.Step.By.Step).完整去密码锁定版 I部分

    1.3 使用命名空间 12 1.4 创建图形应用程序 15 第1章快速参考 22 第2章 使用变量、操作符和表达式 25 2.1 理解语句 25 2.2 使用标识符 26 2.3 使用变量 27 2.3.1 命名变量 27 2.3.2 声明变量 28 2.4 使用...

    【05-面向对象(下)】

    •局部内部类不能在外部类以外的地方使用,那么局部内部类也不能使用访问控制符和static修饰 匿名内部类 •匿名内部类适合创建那种只需要一次使用的类,定义匿名内部类的语法格式如下: •new 父类构造器...

    程序设计基础答案

    定义主类的类头时可以使用的访问控制符是( )。 A) private B) protected C) public D) private protected 15.下列整型的最终属性 i 的定义中,正确的是( )。 A) static final int i=100; B) final i;...

    Scala程序设计(第2版)

    2.11 用文件和名空间组织代码 54 2.12 导入类型及其成员 55 2.12.1 导入是相对的 56 2.12.2 包对象 57 2.13 抽象类型与参数化类型 57 2.14 本章回顾与下一章提要 59 第3章 要点详解 60 3.1 ...

    c#学习笔记.txt

    接口可以是命名空间或类的成员,并且可以包含下列成员的签名:方法属性 索引器. 一个接口可从一个或多个基接口继承。接口可由类实现。实现的接口的标识符出现在类的基列表中。被继承的接口称为该接口的显式基接口。...

    net学习笔记及其他代码应用

    1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,...

Global site tag (gtag.js) - Google Analytics