Java-InnerClass-02

 Java自带了很好的隐藏机制:只给予某个类"包访问权"(仅在同一个包内可见),而用不着把类创建为内部类.
 当将内部类向上转型为其基类,尤其转型为一个接口的时候,内部类就有了用武之地.
 从实现了某个接口的对象,得到对此接口的引用,与向上转型为这个对象的基类,实质上效果是一样的.
 这是因为此内部类(某个接口的实现)对于其他人来说能够完全不可见(而不只是包外不可见)且不可用.所得到的只是指向基类or接口的引用,所以能够很方便的隐藏实现细节.
class  Parcel_Upcast {
    
private class Pcontents implements Contents{
        
private int value;
        
private Pcontents(int value){
            
this.value = value;
        }

        
public int readValue(){
            
return value;
        }

    }

    
private class Pdestination implements Destination{
        
private String label;
        
private Pdestination(String toWhere){
            label 
= toWhere;
        }

        
public String readLabel(){
            
return label;
        }

    }

    
public Contents getContents(int value){
        
return new Pcontents(value);
    }

    
/*返回类型最好设置为基类or接口,名称get基类,return的是内部类就ok了.这可以理解为是一种规范.*/
    
public Destination getDestination(String label){
        
return new Pdestination(label);
    }

}
main方法必须在一个独立的类中,才能演示出私有内部类的性质
private内部类给类的设计者提供了一种途径,通过这种方式可以完全阻止任何依赖于类型的编码,并且完全隐藏了实现的细节.
从客户端程序员的角度看,由于不能访问任何新增加的,原来不属于公共接口的方法,所以扩展接口是没有价值的.这给编译器提供了生成更高效代码的机会.
普通的(非内部的)类,不能申明为private和protected,它们只可以被赋予public或者包访问权.
class  TestParcel_Upcast {
    
public static void main(String[] args) {
        Parcel_Upcast par 
= new Parcel_Upcast();
        Contents con 
= par.getContents(20);
        Destination des 
= par.getDestination("NanJing");
    }

}

/*重名问题*/
class  Outer1 {
    
private int size;
    
class Inner{
        
private int size;
        
public void doStuff(int size){
            size
++;//引用的是doStuff函数的形参
            this.size++;//引用的是Inner类中的成员变量
            Outer1.this.size++;//引用的是Outer1类中的成员变量
        }

    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值