欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java匿名内部类,

来源: javaer 分享于  点击 6902 次 点评:71

Java匿名内部类,


public class innerClass {

	public static void main(String[] args) {

		Imammal ma = new Imammal() {
			public void move() {
				System.out.println("swimming!");
			}

			public void jump() {
				System.out.println("jumping!");
			}
		};
		
		
		new Imammal() {
			public void move() {
				System.out.println("swimming!");
			}

			public void jump() {
				System.out.println("jumping!");
			}
		}.jump();
		
		Comparable str0 = new String("test");
		
		String str = new String("test");
		
		
	}

}

interface Imammal {
	public abstract void move();
}

以java运行为例。

1.创建方式不同

匿名内部类由于没有类名而不能单独存在,定义匿名内部类的同时须直接实例化该类。

第一种,创建出的为类的子类。

 new 父类构造器([参数列表]){   

       //匿名内部类类体

   }

第二种,为接口的实现类。

 new 接口(){   

       //匿名内部类类体

   }

由接口的特性可知,第二种匿名内部类类体必须全部重写接口中的方法。

但第一种可以重写,也可以不重写。

两者都可以增加新的方法。

 

2.代码给出了匿名内部类的两种调用。

第一种为接口回调,类似于上转型对象(即父类声明,子类实例化)。

new Imammal(){}出来的已经是接口的实例化对象,前面的 Imammal 仍为接口。

类比下面的  Comparable str0 = new String("test");  

Comparable 是一种接口,而String中实现了Comparable接口,相当于 Comparable 是父类,而String是子类。此时的str0是上转型对象,不可调用子类中新增的方法/属性。

 

第二种是非上转型对象方式创建的匿名内部类对象。

这个匿名内部类仍属于Imammal接口类,但它没有对象名,不可以通过  对象名.方法名/属性名 来调用其内方法属性。

一个匿名内部类对象只能调用一个新增的属性或方法。

 

这两种创建方式均没有对象名,他们都没有构造方法。

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章

    暂无相关文章
相关栏目:

用户点评