您的位置:首页 > 编程语言 > Java开发

Java 内部类

2015-06-30 00:00 507 查看
Java 内部类分为:成员内部类,静态嵌套类,方法内部类,匿名内部类。

(1)内部类仍然是一个独立的类,在编译之后会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号。

(2)内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private。

(3)内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量。

成员内部类:

class A{

class B{}

}

编译上述代码会产生两个文件:A.class和B.class

方法内部类

把类放在方法里

public class A{

public int f()

{

private class B{

int i=10;

}

return new B().i;

}

public static void main(String[] args)

{

A a= new A();

system.out.printfln(af());

}

}

匿名内部类--用于临时创建实例,且该实例不希望类的使用者关注

匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较合适的:

·只用到类的一个实例 。

·类在定义后马上用到。

·类非常小(SUN推荐是在4行代码以下)

·给类命名并不会导致你的代码更容易被理解。

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

·匿名内部类不能有构造方法

·匿名内部类不能定义任何静态成员、静态方法。

·匿名内部类不能是public,protected,private,static。

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

·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。

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

(1)继承式的匿名内部类

abstract class person{

public abstract void eat();

}

public class test{

public static void main(String [] args)

{

person p =new person(){

public void eat(){

system.out.printfln("吃");

};

p.eat;

}

}

}

(2)接口式的匿名内部类

interface

Person {



public

void

eat();


}


public

class

Demo {



public

static

void

main(String[] args) {



Person p =

new

Person() {



public

void

eat() {



System.out.println(

"eat something"

);



}



};



p.eat();



}


}


(3)参数式的匿名内部类

class Bar{

void doStuff(Foo f){

f.foo();

}

}

interface Foo{

void foo();

}

class Test{

static void go(){

Bar b = new Bar();

b.doStuff(new Foo(){

public void foo(){

System.out.println("foofy");

}

});

}

}

静态嵌套类
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: