[置顶] 浅谈四种内部类

Java中内部类分为四种,分别是静态内部类、成员内部类、局部内部类和匿名内部类。下面分别介绍这四种内部类以及相互之间的联系和区别。


(1)静态内部类(static inner class)

①定义方式:

public class OuterClass{//外部类

public static class StaticInnerClass{ } //这个为静态内部类

}

②实例化方式:

OuterClass.StaticInnerClass innerClass = new OuterClass.StaticInnerClass();


③注意事项:

由于此内部类为静态内部类,所以它只能访问外部类中的静态成员变量和静态成员方法,不能访问非静态的成员变量和方法。理解这一点可以类比静态方法。


(2)成员内部类(member inner class)

①定义方式:

public class OuterClass{//外部类

public class MemberInnerClass{ } //这个为成员内部类

}


②实例化方式:

OuterClass.MembetInnerClass innerClass = new OuterClass().new MemberInnerClass();


③注意事项:

由于此内部类为成员内部类,所以它能访问外部类中的所有成员变量和成员方法包括静态和非静态。理解这一点可以类比普通方法。


***************************************************************************************************************************************************************************************

【对比】静态内部类和成员内部类的实例化方式:

由于静态内部类的对象是属于外部类,而不是属于外部类的对象,所以其实例化时直接通过外部类的类名加内部类的类名来完成。而成员内部类的对象属于外部类的对象,所以其实例化需要通过外部类的对象加内部类的类名来完成。

****************************************************************************************************************************************************************************************



(3)局部内部类(local inner class)

①定义方式:

public class OuterClass{//外部类

public void test(){//外部类中的方法

class LocalInnerClass{ } //局部内部类

//此处实例化局部内部类的方法

}

}

②实例化方式:

由于局部内部类在OuterClass类以外无法访问(理解这一点可以类比方法的局部变量),所以对局部内部类的访问只能在定义该类的方法中完成。


③注意事项:

局部内部类只能访问外部类的final类型的变量。


(4)匿名内部类(anonymous inner class)

①定义方式:

public class OuterClass{

public Strring get(Date date){

return data.toLocaleString();

}


public static void main(String[] args){

OuterClass outerClass = new OuterClass();

String str = outerClass.get(new Date()){

@Override

public String toLocaleString(){

return "hello world";

}//匿名内部类结束

};

}

}


②实例化方式:

由于匿名内部类没有类名,也就没有构造方法,所以无法进行实例化。


③注意事项:

<1>匿名内部类没有类名,没有访问修饰符,没有extends和implements等关键字,也没有构造方法。

<2 >匿名内部类隐式的继承了一个类或者实现了一个接口,上面例子中就是继承了Date类。(继承的类或者实现的接口就是new后面的那个类或者接口)



以上是本人关于内部类的理解,如有不当之处,敬请指正。



你可能感兴趣的:(内部类,匿名内部类,成员内部类,静态内部类,局部内部类)