thingking in java 读书笔记----接口和内部类

 
接口的使用,可以模仿c++中的多重继承,有一个限制,一个类只能继承一个类,却可以实现多个接口,用implements关键字。接口中可以有变量,但都默认是public static final的。所以可以用作c++中的enum。
 
用作enum时候,使用方法是把它的packet import进来,然后直接用 接口的名字.变量 来引用。如:interface month{
       int Jan=1;
       int Feb=2;……
 
}.引用的时候,就用month.Jan。里面的数据不是接口的一部分,只是存储在接口的静态存储区。
 
里面的函数也默认是public的。接口的使用可以使得类可以向上转型为多种类型。
 
接口可以嵌套,可以定义在类的内部,在类的内部定义的接口可以有public,private,和包访问权限。private的内部接口不能在类的内部实现。对于嵌套接口,实现它的时候不需要实现它内部的被嵌套的接口。内部类可以赋予private或者是protected类型,protected权限同时有包访问权限。但是非内部的类只能有public或者是包访问权限。
      
匿名类:一般出现在函数里面。形式:
public int func (final int i,final float j)//如果在匿名类中使用外部对象,一定要是final的。
       return new baseClass/interface (args) {//可以带有参数,传给基类的相应构造函数。在实例初始化前执行。
              private int a;
              {
                     //实例初始化部分,相当于是构造函数,但是只能有一个,不能重载,因为没有名字。
                     if(i>100){….}//使用了外部变量或者对象,一定是final的。
}
              public void f (){}
}
 
内部类的一个重要的性质是:它默认的情况下就可以访问其外围类的所有成员的权限,就像访问自己的成员一样。这是因为内部类中默认有指向外围类的引用,通过这个引用来访问外围类的成员。
 
这个跟c++中不一样,在c++中,需要用friend关键字来说明,java中不需要,这个可以很方便的实现iterator功能。
 
嵌套类:前面的普通的内部类的构建需要外围类对象的存在,嵌套类就是在内部类的定义前面加上static关键字。使得它具有独立的性质:
       要创建嵌套类的对象,不需要外围类的对象。普通的内部类要构建其对象,必须一个外围类的对象的存在,使用外围类对象的函数类构建内部类对象。
       比如:OuterClass.InnerClass a =b.new InnerClass();其中b就是已经存在的外部类对象。构建嵌套类不需要这样。
       不能从嵌套类的对象中访问外围类非静态的成员,因为嵌套类中没有了指向外围类对象的引用了。
 
引用外围类的对象:语法:sequence.sselector 中,在内部类引用外部类的对象:
sequence.this.
 
局部内部类和匿名内部类:功能是一样的,都是在函数里面,都可以使用外部类的成员和区域内的常量。使用局部内部类而不使用匿名内部类的唯一原因就是可能你需要构建多个对象,或者要重载构造函数,匿名内部类不能重载构造函数,只能用实例初始化。
 
内部类可以模拟c++中的多重继承。使用接口只能继承一个类,实现多个接口,但是如果非要继承多个类的时候,只能用内部类来实现,每个内部类继承一个基类。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值