欢迎来到论文网! 识人者智,自知者明,通过生日认识自己! 生日公历:
网站地图 | Tags标签 | RSS
论文网 论文网8200余万篇毕业论文、各种论文格式和论文范文以及9千多种期刊杂志的论文征稿及论文投稿信息,是论文写作、论文投稿和论文发表的论文参考网站,也是科研人员论文检测和发表论文的理想平台。lunwenf@yeah.net。
您当前的位置:首页 > 毕业论文 > 计算机毕业论文

JAVA匿名类的分析和理解_子类

时间:2012-06-27  作者:火善栋

论文导读::学习过JAVA的人都知道。什么是匿名类。匿名类与普通类子类的分析和比较。匿名类与接口实现类的分析和比较。
论文关键词:JAVA,匿名类,子类,接口
 

1.引言

什么是匿名类,很多教材和参考书把它解释为:匿名类是一个内部类,是一个没有类名的类,匿名类的优点是它可以使代码结合更加紧凑,使代码更加易于理解。

其实,这种解释并没有说明匿名类的实质子类,这是对匿名类的一种很肤浅的认识和理解。因此,很多JAVA的学习者尤其是初学者在接触到匿名类时常常是一头雾水,不知道匿名类到底是一个什么东西,以及在实际编程中如何去运用匿名类。学习过JAVA的人都知道,在JAVA GUI程序设计中会大量地运用到匿名类,很多学习者在编写这类程序时常常是模仿一些现成的实例,但并没有搞清楚为什么这样用,并且有很多此类程序由于匿名类的大量运用,使得这类代码变得难以理解,这其中一个很根本的原因就是没有搞清楚匿名类的实质。

本文的理解是:匿名类是一个内部类,匿名类实质也是一个类(普通类或抽象类)的子类或者是一个接口的一个实现类中国论文网

下面就通过三个具体的实例来分析匿名类的实质。

2.匿名类与普通类子类的分析和比较

 

public class AnalyseAno

{

class TestClass

{

void sleep()

{

System.out.println ('this general class id sleeping');

}

void cry()

{

System.out.println ('this general class is crying');

}

}

class Son extends TestClass

{

void cry()

{

System.out.println('this general class'son is crying');

}

}

void test()

{

TestClass aa=new Son();

TestClass bb=new TestClass(){public void cry()

{ System.out.println ('this general class'son is crying'); } };

aa.cry();

bb.cry();

}

public static void main(String[] args)

{

AnalyseAno tt=new AnalyseAno();

tt.test();

}

}

 

 

表1 匿名类与普通类子类示例代码比较表

表一中的代码定义了两个内部类TestClass 和Son,其中Son是TestClass的子类子类,Son覆盖了TestClass中的cry方法。另外,在test方法中创建了两个实例,一个是Son的一个实例aa,另一个是TestClass的一个匿名类的一个实例bb,该匿名类的方法与Son中的方法相同,最后用这两个不同的实例分别调用相应的cry方法。其运行结果都为'this generalclass'son is crying'。这个实例说明::定义一个匿名类与定义一个一般类的一个子类,其内在含义和调用方法方式完全相同。

3.匿名类与抽象类子类的分析和比较

 

public class AnalyseAno

{

abstract class TestAbstract

{

void sleep()

{

System.out.println ('this abstract class id sleeping');

}

abstract void cry();

}

class Son extends TestAbstract

{

public void cry()

{

System.out.println ('this abstract class'son is crying');

}

}

void test()

{

TestAbstract aa=new Son();

TestAbstract bb=new TestAbstract()

{ public void cry()

{

System.out.println ('this abstract class'son is crying');

} };

aa.cry();

bb.cry();

}

public static void main(String[] args)

{

AnalyseAno tt=new AnalyseAno();

tt.test();

}

}

表2 匿名类与抽象类子类示例代码比较表

表二中的代码定义了两个内部类TestAbstract 和Son,其中Son是TestClass的子类,TestAbstract是一个抽象类,Son覆盖了TestAbstract中的cry抽象方法。另外,在test方法中创建了两个实例,一个是Son的一个实例aa子类,另一个是TestAbstract的一个匿名类的一个实例bb,该匿名类的方法与Son中的方法相同,最后用这个不同的实例分别调用相应的cry方法。其运行结果都为'this general abstractclass'son is crying'。这个实例说明::定义一个抽象匿名类与定义一个抽象类的一个子类(当然这个子类不能再是一个抽象类)其内在含义和调用方法方式完全相同。

4.匿名类与接口实现类的分析和比较

 

public class AnalyseAno

{

interface TestInterface

{

void sleep();

abstract void cry();

}

class Son implements TestInterface

{

public void cry()

{

System.out.println ('this interface' sonis crying');

}

public void sleep()

{

System.out.println ('this interface'son is sleeping ');

}

}

void test()

{

TestInterface aa=new Son();

TestInterface bb=new TestInterface()

{ public void cry()

{

System.out.println ('this interface' son is crying');

}

public void sleep()

{

System.out.println ('this interface'son is sleeping '); }};

aa.cry();

bb.cry();

}

public static void main(String[] args)

{

AnalyseAno tt=new AnalyseAno();

tt.test();

}

}

表3 匿名类与接口实现类示例代码比较表

表三中的代码定义了一个内部接口TestInterface 和实现这个内部接口的一个内部类Son, Son实现了接口TestInterface中的两抽象方法cry和sleep中国论文网。另外,在test方法中创建了两个实例,一个是Son的一个实例aa,另一个是TestInterface的一个匿名类的一个实例bb,该匿名类的方法与Son中的方法相同,最后用这个不同的实例分别调用相应的cry方法。其运行结果都为'this interface'son is crying'。这个实例说明::定义一个接口匿名类与定义一个接口的一个实现类(当然这个实现类不能是一个抽象类)其内在含义和调用方法方式完全相同。

5.结论:

匿名类可以理解为一个类(普通类或抽象类)的子类或者是一个接口的一个实现类,当这个匿名类是一个普通类的子类时,这个类中的方法必须要覆盖父类中的某些方法,否则没有任何意义;当这个匿名类是一个抽象类的子类时子类,这个类中的方法必须要实现父类中所有的抽象方法,当然也可以覆盖某些方法;当这个匿名类是一个接口的一个实现类时,这个类中的方法必须要实现这个接口中所有的抽象方法。总之,匿名类的定义原则和调用方式与类的子类以及接口实现类(这些子类或实现类不能是抽象类)的定义原则和调用方式完全相同,所不同的主要有两点:其一,若匿名类中定义的方法在父类或接口中没有定义或声明时,则这个方法无法调用,也就是说这个方法没有任何意义,但是在子类或实现类中却不存在这种情况;其二,匿名类的实例化是通过其父类或所实现的接口(如 new <父类名或接口名>()来实现来,匿名类没有类名所以也没有构造方法)。


参考文献
[1]李芝兴等.Java程序设计之网络编程.清华大学出版社,2009年8月第1版
[2]王森.Java深度历险,华中科技大学出版社,.2002年10月 第1版
[3]王克宏.Java技术教程(基础篇),清华大学出版社,2002年
 

 

查看相关论文专题
加入收藏  打印本文
上一篇论文:IPv6为物联网的发展提供契机_移动性
下一篇论文:Java规则引擎技术研究_演绎推理
毕业论文分类
行政管理毕业论文 工商管理毕业论文
护理毕业论文 会计毕业论文
会计专业毕业论文 英语专业毕业论文
大学毕业论文 硕士毕业论文
计算机毕业论文 市场营销毕业论文
物流管理毕业论文 法学毕业论文
相关计算机毕业论文
最新计算机毕业论文
读者推荐的计算机毕业论文