学习任务:

视频学习

动手定义匿名内部类

理解匿名内部类的特点

匿名内部类是一种特殊的局部内部类,匿名内部类顾名思义即没有名字的内部类,匿名内部类的定义格式如下:

new 父类或接口名称(){
   //类实现体
}

下边是一个匿名内部类的例子:

package com.pbteach.javase.oop.innerclass;


/**
 * 匿名内部类测试
 * @author 攀博课堂
 * @version v1.0
 */
public class FirstOuterClass3 {
	
	
	public void getFirstInnerClassObj(){
		//在方法中创建一个局部内部类
		class FirstInnerClass{
			//构造方法
			public FirstInnerClass() {
				//得到个部类对象的引用 
				System.out.println(FirstOuterClass3.this);
			}
			//普通方法
			public FirstInnerClass getInstance() {
				System.out.println(this);
				return this;
			}
			
		}
		//定义一个匿名内部类,它为FirstInnerClass的子类,并对getInstance()方法重写
		FirstInnerClass firstInnerClass = new FirstInnerClass() {
			//普通方法
			public FirstInnerClass getInstance() {
				System.out.println("我是匿名内部类");
				System.out.println(this);
				return this;
			}
		};
		FirstInnerClass instence = firstInnerClass.getInstance();
	}
	
	public static void main(String[] args) {
		FirstOuterClass3 firstOuterClass2 = new FirstOuterClass3();
		firstOuterClass2.getFirstInnerClassObj();
	}

}

运行输出:

com.pbteach.javase.oop.innerclass.FirstOuterClass3@2cb4c3ab
我是匿名内部类
com.pbteach.javase.oop.innerclass.FirstOuterClass3$1@13c78c0b

注意:不同的电脑所输出的对象的内存地址不一致。

匿名内部类特点如下:

1)匿名内部类没有名字。

2)匿名内部类没有权限修饰符。

3)匿名内部类由于没有名字所以无法定义构造方法,可用构造代码块实现。

如下代码:

		//定义一个匿名内部类,它为FirstInnerClass的子类,并对getInstance()方法重写
		FirstInnerClass firstInnerClass = new FirstInnerClass() {
			private int a;
			{
				System.out.println("构造代码块");
				a=0;
			}
			//普通方法
			public FirstInnerClass getInstance() {
				System.out.println("我是匿名内部类");
				System.out.println(this);
				return this;
			}
		};

4)匿名内部类对象无法通过外部类对象去创建,成员内部类对象可通过外部类对象创建。

5)匿名内部类要么继承父类,要么实现接口,两者不能兼备且只允许直接有一个父类或接口,成员内部类没有限制。

7)匿名内部类可以访问外部类的成员变量及成员方法 。

8)匿名内部类只允许使用作用域内的final常量。

提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题