java 内部类

什么时候使用:

当A类中的内容要被B类直接访问,而A类还需要创建B的对象,访问B的内容时,将B称之为内部类(内置类、嵌套类)。

访问方式:

内部类可以直接访问外部类中的所有成员,包含私有的;而外部类要想访问内部类中的成员,必须创建内部类的对象。

class Outer//外部类{
         private int num = 4;
         public calss Inner//内部类{
         void show(){
         System.out.println("num<span style="font-family: Arial, Helvetica, sans-serif;">"</span><span style="font-family: Arial, Helvetica, sans-serif;">=num);</span>
                     }
                                    }
         void method(){
                 /*Outer.*/Inner in = new /*Outer.*/Inner();
                 in.show();
                       }
                     }
class InnerClassDemo{
         public static void main(String[] args){
                 Outer out = new Outer():
                 out.method();
                                               }
                    }
public static void main(String[] args){
         Outer out = new Outer();
         out.method();

         //测试情况一:直接访问Outer中的Inner内部类的非静态成员
         //创建内部类的对象就可以了,内部类作为成员,应该先有外部类对象,再有内部类对象。
         Outer.Inner in = new Outer().new Inner();
         in.show();

         //测试情况二:对静态内部类中的非静态成员进行调用
         //因为内部类是静态,所以不需要创建Outer的对象,直接创建内部类对象就可以了。
         Outer.Inner2 in = new Outer().new Inner2();
         in.show2();
                                        }

怎么访问的:


为什么内部类就能直接访问外部类中的成员呢?

        因为内部类其实持有了外部类的引用,  外部类.this,对于静态内部类不持有外部类.this  而是直接使用 外部类名

局部内部类特点:

匿名内部类,其实就是一个带有内容的子类对象。

class InnerClassDemo4{
        public static void main(String[] args){
        Outer out = new Outer();
        AbsDemo a = out.getObject();//多态
        a.show();
  }
}

现在不想创建具体的子类型,但还想创建AbsDemo的子类对象,如何实现?

直接使用父类就可以了,可是在该例中是抽象类,怎么new对象?→重写抽象方法。

new AbsDemo(){
        //重写抽象的show方法
        void show(){
                System.out.println("num="+num);
 }
}
这就是传说中的一个AbsDemo的子类对象,只不过这是一个带着内容的子类休想。

格式:new 父类or接口(){子类的内容}

其实尼匿名内部类就是内部类的简化形式;注意匿名内部类有前提,必须要继承父类或者实现接口。


注意:

如果内部类有静态成员,该如何访问:

既然静态内部类已经随外部类加载,而且静态成员随着类的加载而加载,就不需要对象,直接用类名调用即可。

Outer.Inner2.staticShow();


static void show1(){}//非静态内部类中不允许定义静态成员;仅允许在非静态内部类中定义静态常量(static final)

如果想要在内部类中定义静态成员,必须内部类也要被静态修饰。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值