飞道的博客

内部类(四)匿名内部类(及与匿名对象的区别)

422人阅读  评论(0)

匿名内部类(没有类名)

前文我们探讨了静态内部类成员内部类局部内部类,接下来看一看Java内部类的最后一个匿名内部类。

匿名内部类就是局部内部类的进一步隐藏, 所以局部内部类的所有限制都对其生效。
局部内部类:定义了之后在局部区域内仍旧可以创建多个对象
匿名内部类:声明一个类之后就只能创建一个对象了,因为他并没有类名字。开发中,最常用到的内部类就是匿名内部类了。

使用匿名内部类的目的:

1、因为接口和抽象类都不能实例化对象

2、通常访问一个接口时要:(1)定义子类、(2) 重写接口中的方法、(3) 创建子类对象、(4) 调用重写后的方法
如果接口的实现类(或者是父类的子类)只需要使用唯一的一次,那么这种情况下我们就可以省略掉该类的定义,而改为使用匿名内部类。

3、类在定义后马上用到。

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

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

特点

一、因为在创建匿名内部类的时候,会立即创建它的对象,可知匿名内部类不能是抽象类,所以其必须继承一个抽象类或者实现一个接口。

匿名内部类的定义格式:
接口或抽象类名称 对象名 = new 接口或抽象类名称() {
//覆盖重写所有抽象方法(匿名内部类的内容)
};
意思是创造一个实现(继承)了接口或抽象类的类的对象。
1、定义接口

public interface Hello{
 	public abstract void Run();
}

2、创造匿名内部类的对象

public class Demo {
 	public static void main(String[] args) {
 	Hello hello = new Hello() {//匿名内部类
  		public void Run() {
  	 		System.out.println("跑步");//重写所有抽象方法
  		}
  	};
  	hello.Run();//输出结果 跑步
	}
}	

二、匿名内部类没有类名,因此没有构造方法。

三、匿名内部类访问外部类成员变量或成员方法必须用static修饰,否则会报错。

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

五、内部类可以访问外部类私有变量和方法。
当匿名内部类和外部类有同名变量(方法)时,默认访问的是匿名内部类的变量(方法),要访问外部类的变量(方法)则需要加上外部类的类名。

六、根据声明的位置,判断匿名内部类是成员内部类还是方法内部类。注:一般是方法内部类,这时就具备方法内部类的特性。

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

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

匿名内部类实现线程匿名内部类实现线程的两种方式

匿名内部类与匿名对象的理解

  1. 匿名内部类,在【创建对象】的时候,只能使用唯一一次。如果希望多次创建对象,而且类的内容一样的话,那么就需要使用单独定义的实现类
  2. 匿名对象,在【调用方法】的时候,只能调用唯一一次。如果希望同一个对象,调用多次方法,那么必须给对象起个名字。
  3. 匿名内部类是省略了【实现类/子类名称】,匿名对象是省略了【对象名称】

匿名对象的调用方式:
new 类名.方法名(参数);

public class Demo {
	public static void main(String[] args) {
		new Hello().Run("Hello");//调用匿名对象
	}
}
class Hello{
	public void Run(String a) {
		System.out.println(a + “ World");//输出结果Hello World
	}
}

匿名内部类和匿名对象同时使用

public class Demo {
 	public static void main(String[] args) {
  		new Hello() {//匿名内部类
   			@Override
   			public void Run(String a) {
    				System.out.println(a+" World");
   			}
  		}.Run("Hello");//输出结果Hello World
 	}
}
interface Hello{
 	public void Run(String a) ;
}

转载:https://blog.csdn.net/weixin_45797022/article/details/104561274
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场