匿名类~由一个貌似简单的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新的匿名类时总是先调用父类的构造方法,因此匿名类匿名类的其实就是类继承的变种,只不过匿名类不能有构造方法,因此它不能像其他正常的类继承那样先调用父类的构造方法而后再调用自己的构造方法!因此匿名类通过调用父类的构造方法进行构造。
但是当通过接口构造匿名类是我也不知道是怎么构造出这个匿名类来的。?
分享到:
相关推荐
JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题JAVA面试题
java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题...
面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....
Java 面试题 Java 面试题 Java 面试题 Java 面试题 Java 面试题 Java 面试题 Java 面试题 Java 面试题 Java 面试题 Java 面试题
北大青鸟JAVA面试题北大青鸟JAVA面试题北大青鸟JAVA面试题北大青鸟JAVA面试题北大青鸟JAVA面试题北大青鸟JAVA面试题北大青鸟JAVA面试题北大青鸟JAVA面试题北大青鸟JAVA面试题北大青鸟JAVA面试题北大青鸟JAVA面试题...
2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里巴巴面试题2023java最新阿里...
Java面试题
最全的j2EE面试题,题量大、经典,是我面试的整理试题 1、java笔试题大集合 2、各个公司面试题 3、J2EE初学者面试题 4、J2EE面试题(打码查错题) 5、java_华为笔试题 6、java常见面试题 7、java程序员面试宝典 8、...
JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...
JAVA面试题2019
Java面试题以及答案整理
java面试题总结资料
java面试题java面试题18道java面试题18道java面试题18道java面试题java面试题18道java面试题18道java面试题18道java面试题java面试题18道java面试题18道java面试题18道java面试题java面试题18道java面试题18道java...
java面试题大汇总(非常重要)java面试题大汇总(非常重要)java面试题大汇总(非常重要)java面试题大汇总(非常重要)java面试题大汇总(非常重要)java面试题大汇总(非常重要)java面试题大汇总(非常重要)java面试题大汇总...
java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理
最新各大公司企业真实面试题-Java面试题最新各大公司企业真实面试题-Java面试题
java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java面试题20道java...
Java面试题Java面试题Java面试题Java面试题Java面试题Java面试题Java面试题Java面试题