您的位置:首页 > 职场人生

黑马程序员——java内部类学习笔记

2015-05-03 21:18 267 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------

内部类

内部类的定义:简单来说就是将一个类定义在另一个类的内部,内部类分为:匿名内部类、普通内部类、局部内部类

1、普通内部类:将类放在外围类里

普通内部类可以访问外部类的静态与非静态的方法和成员变量。

生成成员内部类对象的方法:

OuterClass.InnerClass inner = new OuterClass().new InnerClass();

在局部内部类中访问外部类的成员变量的方法:

OuterClass.this.a;

例: public class OuterClass

{

public class InnerClass{}

}

2、匿名内部类:特点-匿名内部类既可以扩展类,也可以实现接口,但不能两者兼备,如果实现接口,只能实现一个接口

使用匿名内部类的情况:只能实例初始化的情况下,实例初始化的实际效果就是构造器,并且仅有一个这样的构造器,并且仅有一个这样的构造器。

public class AnonyClass{

public static Base getBase(int i){

return new Base(i){

System.out.println("Inside instance initializer");

}

public void f(){

System.out.println("in ananymous f()");

}

};

}

Base base = AnonyClass.getBase(47) 输出结果:Inside instance initializer

base.f();输出结果:in ananymous f();

匿名内部类的例子

public class AnonymousInnerClass{

public Destination destination(final String dest,final float price){

return new Destination(){

private in cost;

private String label = dest;

{

cost = Math.round(price);

if(cost>100){

System.out.println("Over budget");

}

}

public String readLabel(){

return label;

}

};

}

} Destination()的参数必须是final的,因为他们是在匿名类内部使用的。

3、局部内部类

局部内部类的特点——不能有访问说明符,由于它不是外围类的一部分,但是它可以访问当前代码块的常量以及此外围类的的所有成员。

使用局部内部类的情况——当需要一个已命名的构造器或则重载的构造器的情况

class LocalInner{

public void f(){

final int a = 1;

class InnerClass{

public void f(){

System.out.println("LocalInnerClass");

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

System.out.println(a);

} } }

new InnerClass.f();

}}

在main函数中的使用

public static void main(String[] args){

//外部类不能直接创建局部内部类

LocalInner localInner = new LocalInner();

localInner.f();

}

3、静态内部类最简单的内部类。

只能访问外部类的静态成员变量与静态方法。

生成静态内部类对象的方法:

OuterClass.InnerClass inner = new OuterClass.InnerClass();

例:class OuterClass{

private static int a = 1;

static class InnerClass{

private static int b = 2;

public void f(){

//只能访问静态的外部类成员

System.out.println(a+b);

};

}

}

实例化方式: OuterClass.InnerClass inner = new OuterClass().InnerClass();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: