java内部类使用_java内部类自我总结

内部类即是在一个类中定义的一个类。外边的类成为外部类,里面的类成为内部类。外部类前面的修饰符必须是public,内部类的修饰符可以private, public, protected,编译会产生两个类,外部类名.class,  外部类名$内部类名.class

一 java内部类的分类和特点

java内部类分成四种: 成员内部类, 静态内部类,局部内部类,匿名内部类。

成员内部类

与外部类的关系,作为外部类的一个成员存在。

访问原则,内部类可以访问外部类的任何成员,但是外部类不能访问内部类的成员,可以通过新建内部类的对象来访问内部类的成员,包款private成员,所以,一个内部类的对象对生成它的外部类对象是完全可见的,包括private内部类、private成员与private方法,同时,内部类对象可以访问外部类对象的任何成员,因为非静态内部类对象有着指向其外部类对象的引用,创建非静态内部类对象时,一定要先创建起相应的外部类对象。

要获得内部类实例,可以使用外部类的对象.new 内部类的方式获得内部类的实例。

OuterClassName.InnerClassName inner=new Ouer().new Inner();

在外部类的非static方法中,如果不是static方法,也可以通过如下方式来获得内部类的实例,但是在非外部类的其他类中,必须以上面的方式来获得内部类实例。

InnerClassName inner=new Ouer.Inner();

或者

InnerClassName inner=new Inner();

静态内部类

静态内部类和成员内部类相比,第一,静态内部类和外部类之间只是嵌套关系,没有其指向外部的引用; 第二,静态内部类不仅可以有非static成员,也可以有static成员; 第三,在获得内部类实例的时候,只能用后面一种方式,但是在非外部类的其他类中,则只能使用如下的一种,即:

InnerClassName inner=new Ouer.Inner();

局部内部类

写在一个方法中,或者一个语句块中的内部类,它的作用域仅限于该方法或者语句块。

01.public classGoods2 {02. private void internalTracking(booleanb) {03. if(b) {04. classTrackingSlip {05. privateString id;06. TrackingSlip(String s) {07. id =s;08. }09. String getSlip() {10. returnid;11. }12. }13. TrackingSlip ts = new TrackingSlip("slip");14. String s =ts.getSlip();15. }16. }17. public voidtrack() {18. internalTracking(true);19. }20. public static voidmain(String[] args) {21. Goods2 g = newGoods2();22. g.track();23. }24.}

匿名内部类

对于那些只适用一次,不需要对象名的场景,在swing的事件侦听中使用的比较多,比如,以下例子,只返回一个对象。

01.public classGoods3 {02. publicContents cont() {03. return newContents() {04. private int i = 11;05. public intvalue() {06. returni;07. }08. };09. }10.}

二 java内部类的访问原则

java内部类作为java的一个成员,和其他的成员的权限一样。

1  外部类对内部类的访问如上文所示;

2  和外部类同包的类,private的内部类不可见,其他类型的内部类中的private成员不可见,其他的均可以见;

3  和外部类不同包的类,只能访问public内部类的public成员;

4  继承外部类的类的访问,protected的内部类不可见。

如果让不可见的成员可见,可以通过添加接口方法,比如:

public classOut {publicPrivateIn getPrivateIn(){return newPrivateIn();

}private class PrivateIn implementsInMethod{private intprivate_arg;intdefault_arg;protected intprotected_arg;public int public_arg;

三  java内部类的作用

1.内部类可以很好的实现隐藏

一般的非内部类,是不允许有 private 与protected权限的,但内部类可以

2.内部类拥有外围类的所有元素的访问权限

3.可是实现多重继承

4.可以避免修改接口而实现同一个类中两种同名方法的调用。

引文:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值