`
sun1752709589
  • 浏览: 4084 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

匿名类~由一个貌似简单的java面试题所想到的···

阅读更多
匿名类~由一个貌似简单的java面试题所想到的···
先分享个网盘搜索酷站http://www.easysoso.cn
原题如下:
public class Tex { public static void main(String[] args) {  if(___________){   System.out.println("world");  }  else{   System.out.println("hello");  } }}只能在if(_____)里面写代码,如何让输出结果是“hello world”?

答案有几种(当然还应该有别的吧),如下:
NO1:if(new Tex(){{System.out.print("hello ");}}!=null)
NO2:if (System.out.append("hello ") != null)
NO3:if(System.out.printf("hello ")!=null)

对于答案1,用的是匿名类。个人觉得匿名类在写程序时用的并不多,所以有时看见时觉得比较生僻,现整理如下:
一、匿名类的语法:
1、匿名类没有名字(废话)
2、不能给匿名类添加构造方法
3、匿名类无法显式的继承某个类或实现某个接口
4、匿名类没有任何修饰符
二、现在介绍匿名类的3中用法:

1:通过接口使用匿名类
(1)先定义一个接口:
  public interface AnInterface {
public void method();
  }
  (2)下面是测试用Cilent:
public class Client {
public static void main(String[] args) {
AnInterface anonymous = new AnInterface() {
public void method() {
System.out.println("hello world!");
}
public void method2() {
System.out.println("hello world!");
}
};
anonymous.method();
}
}
输出为:hello world!
总结:一般new关键字后面应该跟一个类名的,但现在我们看到new后面紧接着跟了个接口名!但再看后面有{},可以认为它是匿名类的类体。因此,这个匿名类没有名字,但它实现了接口AnInterface,并且在自己的类体中实现了接口AnInterface中的抽象方法method,事实上此匿名类必须实现接口所有的抽象方法。
2:通过抽象类使用匿名类:
  (1)先定义一个抽象类:
public abstract class AnAbstractClass {
public AnAbstractClass(){
System.out.println("AnAbstractClass");
}
public void method1(){
System.out.println("method1");
}
public abstract void method2();
}
  (2)下面是测试用Cilent:
  public class Client {
  
   public static void main(String[] args) {
  
   AnAbstractClass anonymous=new AnAbstractClass(){
  
   @Override
   public void method2() {
   System.out.println("method2");
   }
  
   };
   anonymous.method1();
   anonymous.method2();
  
   }
  }
(3)输出为:AnAbstractClass
  method1
  method2
总结:其实和通过接口使用匿名类用法很相似,核心就是:对于抽象方法在匿名类中必须给予实现,使抽象的抽象类或接口不再抽象,也就可以创建类的实例了。
另外如果抽象类的构造方法有参数的话那么匿名类也要加参数,即:
public AnAbstractClass(int n){
System.out.println("AnAbstractClass");
}
AnAbstractClass anonymous=new AnAbstractClass(1){};

3:通过类使用匿名类:
  public class Tex {
  
   public Tex(){
   System.out.println("tex");
   }
  
   public static void main(String[] args) {
   System.out.print("");
   Tex t=new Tex(){{System.out.println("hello ");}};
   Tex tt=new Tex();
   System.out.print("");
  
   }
  }
  输出为:
  tex
  hello
  Tex
  4:总结:(只是个人猜想,不一定对)匿名类的构造原理:由以上的用法2和3的输出可以看出在new新的匿名类时总是先调用父类的构造方法,因此匿名类匿名类的其实就是类继承的变种,只不过匿名类不能有构造方法,因此它不能像其他正常的类继承那样先调用父类的构造方法而后再调用自己的构造方法!因此匿名类通过调用父类的构造方法进行构造。
但是当通过接口构造匿名类是我也不知道是怎么构造出这个匿名类来的。?
3
3
分享到:
评论
5 楼 mfkvfn 2012-11-28  
简单地看,匿名类就是new一个接口或new一个抽象类。
4 楼 sun1752709589 2012-11-27  
kidneyball 写道
不是“不能有构造方法”,而是不能由程序员自定义构造方法,任何类都默认有一个public的无参构造方法。

恩恩,谢谢指出错误哈,学习了
3 楼 sun1752709589 2012-11-27  
easense2009 写道
这样写会不会简单一些?
if (Boolean.valueOf(new Object() {

	@Override
	public String toString() {
		System.out.println("hello ");
		return "true";
	}}.toString())) {
	System.out.println("world");
}


嗯,这样更好理解了
2 楼 easense2009 2012-11-27  
这样写会不会简单一些?
if (Boolean.valueOf(new Object() {

	@Override
	public String toString() {
		System.out.println("hello ");
		return "true";
	}}.toString())) {
	System.out.println("world");
}
1 楼 kidneyball 2012-11-27  
不是“不能有构造方法”,而是不能由程序员自定义构造方法,任何类都默认有一个public的无参构造方法。

相关推荐

    10万字总结java面试题和答案(八股文之一)Java面试题指南

    JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....

    java面试题集锦 java面试题集锦

    而对于对象引用,`==`比较的是两个引用是否指向同一个内存位置,即同一对象。而`equals`方法在默认情况下也类似于`==`,比较对象的引用,但很多类如String和Integer重写了`equals`,使其进行值的比较。例如,两个...

    java面试题,J2EE面试题 笔试题

    最全的j2EE面试题,题量大、经典,是我面试的整理试题 1、java笔试题大集合 2、各个公司面试题 3、J2EE初学者面试题 4、J2EE面试题(打码查错题) 5、java_华为笔试题 6、java常见面试题 7、java程序员面试宝典 8、...

    最新各大公司企业真实面试题-Java面试题

    Java是信息技术领域中...总的来说,这个压缩包为Java开发者提供了一个全面的复习资源,涵盖了从基础知识到高级应用的各种面试题,是准备Java面试的宝贵资料。求职者应深入理解和掌握这些知识点,以提高自己的竞争力。

    Java面试题以及答案整理.pdf

    7. **一个.java源文件是否可以包含多个类** 是的,但只能有一个公开类(`public`类),其他类可以是非公开的。 8. **排序方法和快速排序实现** 常见的排序算法有冒泡排序、选择排序、插入排序、快速排序、归并...

    java面试题整理

    java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理

    2017java面试题

    "2017java面试题"这个压缩包文件提供了丰富的资源,帮助Java开发者准备面试,深化对Java开发的理解。 文档"Java面试宝典2017.doc"可能包含了以下核心Java知识点: 1. **基础语法**:这包括变量、数据类型、运算符...

    2023最新JAVA面试题集

    2023年最新版--Java+最常见的+200++面试题汇总+答案总结汇总 阿里百度美团面试题合集 大数据面试题 100道 多线程面试59题(含答案) 最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 ...

    汇丰软件java面试题

    "汇丰软件Java面试题详解" 汇丰软件Java面试题是许多IT行业新人的梦寐以求的岗位,需要考生具备扎实的Java基础知识和良好的编程能力。以下是对汇丰软件Java面试题的详细解析。 笔试部分 笔试部分主要包含三部分:...

    java面试题,java框架面试题

    Java 面试题、Java 框架面试题 Java 面试题是 Java 开发人员面试的必备知识,涵盖了 Java 基础知识、Java 框架、Java 集合框架、Java 多线程、Java 网络编程等方面的知识点。在本文中,我们将对 Java 面试题进行...

    java面试题总结资料

    抽象类可以有方法实现,但至少包含一个抽象方法。理解它们在设计模式中的应用。 4. **异常处理**:理解Checked异常和Unchecked异常的区别,学习如何使用try-catch-finally语句块进行异常捕获和处理。 5. **集合...

    Java面试题和练习题

    本文将基于标题“Java面试题和练习题”以及描述中提到的内容,深入探讨Java相关的面试题和练习题,旨在帮助求职者或希望提升技能的开发者巩固知识,准备面试。 一、Java基础 1. Java的数据类型:了解Java的八种...

    2024java面试题最全的Java面试题.zip

    2024java面试题2024java面试题最全的Java面试题.zip2024java面试题最全的Java面试题.zip2024java面试题最全的Java面试题.zip2024java面试题最全的Java面试题.zip2024java面试题最全的Java面试题.zip2024java面试题最...

    java面试题大全(网上能搜到的所有面试题)

    张孝祥整理Java就业面试题大全.doc 应届生应聘技术工作的面试技巧(来自培训机构多年经验总结).ppt sql面试题.doc JAVA面试题解惑系列.pdf Java面试题大全.pdf java面试题及答案(基础题122道,代码题19道).doc Java...

    Java面试题2022

    2. **面向对象编程**:Java是一种面向对象的语言,面试中会关注类、对象、封装、继承、多态等概念。深入理解类与对象的关系,以及如何通过接口实现多态性,是展示编程思维的重要环节。 3. **集合框架**:Java集合...

    java面试题集

    java面试题集java面试题集java面试题集java面试题集java面试题集java面试题集java面试题集java面试题集java面试题集

    2017最新Java面试题

    ### 2017最新Java面试题知识点梳理 #### 一、面向对象编程(OOP) 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它使用“对象”的概念来组织代码结构。Java作为一种典型的面向对象语言,支持...

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题

    2022java面试题、JVM面试题、多线程面试题、并发编程、Redis面试题、MySQL面试题、Java2022面试题、Netty面试题、Elasticsearch面试题、Tomcat面试题、Dubbo面试题、Kafka面试题、Linux面试题、2021面试题、java面试...

    Java面试题合集最新版2024.zip

    Java面试通常涵盖多个方面,包括Java基础知识、编程技能、问题解决能力,以及对Java生态系统和相关技术的理解。以下是一些建议的Java面试准备要点和资源描述: 一、Java基础知识 数据类型、变量与运算符:理解Java...

Global site tag (gtag.js) - Google Analytics