天天看点

java 内部类_Java内部类(详细整理)

一.内部类

内部类主要定义在类的内部,定义内部类的作用,主要是因为不希望该类作为大家共同使用访问的类。

1.成员内部类

成员内部类就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private。

外部类要访问内部类的所有成员变量或方法,则需要通过内部类的对象来获取

注意:成员内部类不能含有 static 的变量和方法。

成员内部类的定义如下:

public class 外部类{

public class 内部类{}

}

内部类的实例化:

外部类 对象 = new 外部类();

外部类.内部类 对象2=对象.new 内部类();

2.局部内部类

局部内部类是指内部类定义在方法和作用域内。通俗来说,就是在外部内的方法中定义的内部类就是局部内部类。

局部内部类由于是在方法中定义的,因此,其作用域也是在方法内部中,方法外执行到,则被JVM回收。局部内部类的实例化也只能在方法中进行。

示例:

public class Method{

public static void main(String[] args){

Method m =new Method();

m.test();

}

public void test(){

final double pi=3.14;

int r=6;

class Circle implements Type{

public double area(){

return pi*6*6;

}

}

Circle c =new Circle();

System.out.println("area="+c.area());

}

}

interface Type{

public double area();

}

注意:局部内部类方法中想要使用局部变量,该变量必须声明为 final 类型;所以例子中未用 r 成员变量。

3.静态内部类

静态内部类就是修饰为 static 的内部类。声明为 static 的内部类,不需要内部类对象和外部类对象之间的联系,就是说,用户可以直接引用“外部类.内部类”。

静态内部类实例化如下:

外部类.内部类 对象 = new 外部类.内部类()

4.匿名内部类

匿名内部类是不能有名称的内,所以没办法引用。必须在创建时,作为 new 语句的一部分来声明,如下:

new

匿名内部类形式如下:

new 类或接口{

//方法主体

}

示例:

public class NiMing {

public static void main(String[] args) {

T t = new T(){

@Override

public void t() {

System.out.println("t...");

}

};

t.t();

}

}

interface T{

public void t();

}

匿名内内部类可以当作方法的返回值。

特别注意:

在使用匿名内部类时,要记住以下几个原则。

1.匿名内部类不能有构造方法。

2.匿名内部类不能定义任何静态成员,方法和类。

3.匿名内部类不能使用public,protected,private,static。

4.只能创建匿名内部类的一个实例。

5.一个匿名内部类一定时在 new 后面,用其隐含实现一个接口或实现一个类。

6.因匿名内部类为局部内部类,所以,局部内部类的所有限制都对其有效。

7.内部类只能访问外部类的静态变量或静态方法。

8.内部类当中的 this 指的是匿名内部类本身,如果使用外部类中的 this,则“外部类.this”。