java内部类总结

java内部类总结

一.内部类的种类

1.成员内部类

是最普通的内部类,定义在另一个类的内部。如下所示:

class  Outer{
    int  i=  0 ;
     
     public   Outer( int  i) {
         this .i= i;
     }
     
     class  Inner{      //内部类
         public  void  doSomething() {
             System.out.println( "doSomething" );
         }
     }
}
看起来类Inner像是类Outer的一个成员,Outer称为外部类,成员内部类可以无条件的访问外部类的成员属性和成员方法。(包括私有的和静态的)

class  Outer{
    private int  i=  0 ;
    public static int j=0;
     
     public   Outer( int  i) {
         this .i= i;
     }
     
     class  Inner{      //内部类
         public  void  doSomething() {
             System.out.println( i );
            System.out.println(j);
         }
     }
}
当内部类和外部类拥有相同名称的方法或变量时,默认使用的是内部类当中的,要使用外部类的成员需要用:Outer.this.i这种形式。在外部类如果想要访问内部类的成员,必须先创建一个内部类对象,再通过这个对象来进行访问。

成员内部类依托于外部类,所以创建成员内部类对象必须先创建外部类,如下所示:

Outter outter =  new  Outter();
Outter.Inner inner = outter. new  Inner();

成员内部类可以想其它成员属性一样拥有四种访问权限。

2.局部内部类

定义在方法当中或者某个作用域内,和成员内部类的不同是其访问权限也仅限于此方法或作用域中。如下所示:

class  People{
     public  People() {
         
     }
}
 
class  Man{
     public  Man(){
         
     }
     
     public  People getWoman(){
         class  Woman  extends  People{    //局部内部类
             int  age = 0 ;
         }
         return  new  Woman();
     }
}

3.匿名内部类

没有名称的内部类,需要特别注意的地方有:

(1)匿名内部类没有访问修饰符。

(2)匿名内部类必须继承一个抽象类或者实现一个接口。

(3)匿名内部类不能存在任何的静态成员和方法。

(4)因为没有名称,所以没有构造方法。

以下为匿名内部类的示例:


     public class Button {

public void onClick(){
new ClickListener() {


@Override
public void Action() {
// TODO Auto-generated method stub
System.out.println("调用button按钮");
}

}.Action();
}


public static void main(String[] args) {
// TODO Auto-generated method stub
Button bt = new Button();
bt.onClick();
}

public interface ClickListener{
public void Action();
}


}
 

4.静态内部类

在内部类前加一个static修饰就是静态内部类,和普通内部类不同的是,静态内部类和静态属性,静态方法一样不需要依赖外部类。并且静态内部类不能使用外部类的非静态变量或方法,因为静态内部类创建不需要外部类,而非静态变量或方法创建则需要外部类,所以在没有创建外部类的情况下,静态内部类就不能使用外部类的非静态变量或方法。

二.内部类使用场景和好处

1.内部类可以独立继承接口,无论外部类是否继承某一个接口。

2.更好的封装,只有外部类能够访问内部类。

3.方便写事件驱动程序和线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值