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

Java中的内部类

2016-04-13 20:05 459 查看
1、内部类的分类:

a、成员内部类:

a.1、成员内部类与外部类在编译时,会生成两个class文件,其中内部类

的文件名为:外部类名$内部类名.class

a.2、成员内部类可以使用所有的修饰权限。

b、静态内部类:

b.1、静态内部类中可以定义静态或者非静态成员。

b.2、静态的含义就是该内部类可以像其他静态成员一样,在该外部类没有

实例化的对象时,通过类名.的方式实例化内部类。

c、方法内部类

c.1、方法内部类只能定义在该方法内部,且只能在方法内部实例化,在方法 外部实例化则不可以。

c.2、方法内部类对象不能使用该内部类所在方法的非final修饰的局部变量。

d、匿名内部类

d.1、只用到一个实例。

d.2、类定义后马上就要用到。

d.3、类非常非常的小(官方建议,匿名内部类的代码不超过4行)

d.4、给类命名并不会导致你的代码更容易理解。

拓展:

d.5、接口式:通过new+space+接口的方式创建匿名内部类,相当于创建了一个类实现了这个接口,而且,能且仅能实现1个接口。

d.6、参数式:通过匿名的方式直接实例化一个类,并且当作参数传递给某个方法,这个方法的局部变量就可以直接引用刚才创建好的匿名内部类的对象。

代码实例:

public class Car {

private SportsCar sportsCar = null;

public SportsCar getSportsCar(){

if (sportsCar == null) {

sportsCar = new SportsCar();

}

return sportsCar;

}

//成员内部类

class SportsCar{

}

//静态内部类

static class Bus{

}

//方法内部类

public void walk(final String lyric){

class Singing{

public Singing() {

System.out.println(lyric);

}

}

Singing singing = new Singing();

}

//匿名内部类

public void run(){

System.out.println("速度为; 50");

}

}

public class CoreJavaDay10_3 {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

//1、成员内部类的实例化

Car.SportsCar car = new Car().new SportsCar();

Car car2 = new Car();

SportsCar sportsCar = car2.getSportsCar();

//2、静态内部类的实例化

Car.Bus car3 = new Car.Bus();

//3、方法内部类的实例化,不能在这里实现,

// 因为方法内部类只能在对应的方法中实例化

car2.walk("123");

//4、匿名内部类

new Car(){

public void run(){

System.out.println("速度为: 100");

}

}.run();

2、内部类的应用场景:

a、内部类,仍然是一个独立的类,在编译之后,是$符号,连接左边的外部类与右边的内部类。

b、内部类不能用普通的方式访问,内部类是外部类的一个成员,因此内部类可以自由的访问外部类的成员变量,无论是不是private修饰的。

c、内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: