由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请教 一个 Java 匿名内部类 的面试题!
相关主题
现在面试可以用Java8吗?哪位大牛来比较一下 java, python, scala
有人能说清什么是lambda architecture 么现在面试还有人问java基础么?
有时候java 8也是傻逼有做SRE想换工作的吗?
碰到奇葩组(组员)征友做一起面试题
Java8 Lambda expression看不懂怎么办?Java中,如何保证一个 singleton的实例不会被 垃圾回收?
面试用lambda,stream好不好一个面试题: 如何处理内存泄露(memory leak)
java8 的Lambda 有没有人用回报本版: Java版的面试题代码
Scala还值得学吗?Java 面试题
相关话题的讨论汇总
话题: 匿名话题: 内部话题: java话题: 对象
进入JobHunting版参与讨论
1 (共1页)
s********e
发帖数: 340
1
我前几天面试,被问到Java 匿名内部类:
1. 什么情况下用到匿名内部类?(我的理解是他想问为什么需要使用匿名内部类)
2. 如何找到匿名内部类的对象,他说,因为是匿名的,那么在匿名内部类产生对象后
, 我如何找到这个匿名的内部类对象?
第2个问题,我尤其不太明白答案。
请教大家这两个问题,欢迎讨论!
z****e
发帖数: 54598
2
java的基本概念,虽然用得不多
大部分java教材都会保函有ui部分,这个在ui上大量出现
可能因为最近java8出来了之后,加了default关键字
以及lambda,所以这个东西又被拿出来说
以前1.4时代常见的面试题
java是完全的oo语言,所以不存在有类外部的定义
所有方法和变量都必需写在类里面,包括static变量和方法
那有些时候你需要一些临时的用完一次就不再用的类
把它单独写成一个class就显得麻烦
所以直接用匿名类包装一下,扔给一个object就好了
匿名的是类不是匿名对象,当然可以找到那个对象
如果非要纠结,那就是通过找匿名类的父类来定位
java对象声明不是需要先把对象类给写在前面么?
匿名类的变量声明前面放的是它父类的名字
一般父类是一个接口或者抽象类
s********e
发帖数: 340
3
谢谢回复!
关于第一个问题,我也是回到说是在Swing UI开发中常用到匿名内部类,我感觉我的回
到不是他期望的,他承认我说的对,但是问我还有没有其他的例子,我就想不起来了。
第二个问题,我也是说了如果引用内部类,就是" 外部类.内部类'' 的方式,但是
他反复说,既然是匿名,那又如何知道内部类的名字呢? 没有名字,怎么能用这种方
式去找到呢?

【在 z****e 的大作中提到】
: java的基本概念,虽然用得不多
: 大部分java教材都会保函有ui部分,这个在ui上大量出现
: 可能因为最近java8出来了之后,加了default关键字
: 以及lambda,所以这个东西又被拿出来说
: 以前1.4时代常见的面试题
: java是完全的oo语言,所以不存在有类外部的定义
: 所有方法和变量都必需写在类里面,包括static变量和方法
: 那有些时候你需要一些临时的用完一次就不再用的类
: 把它单独写成一个class就显得麻烦
: 所以直接用匿名类包装一下,扔给一个object就好了

s********e
发帖数: 340
4
谢谢回复!
关于第一个问题,我也是回到说是在Swing UI开发中常用到匿名内部类,我感觉我的回
到不是他期望的,他承认我说的对,但是问我还有没有其他的例子,我就想不起来了。
第二个问题,我也是说了如果引用内部类,就是" 外部类.内部类'' 的方式,但是
他反复说,既然是匿名,那又如何知道内部类的名字呢? 没有名字,怎么能用这种方
式去找到呢?

【在 z****e 的大作中提到】
: java的基本概念,虽然用得不多
: 大部分java教材都会保函有ui部分,这个在ui上大量出现
: 可能因为最近java8出来了之后,加了default关键字
: 以及lambda,所以这个东西又被拿出来说
: 以前1.4时代常见的面试题
: java是完全的oo语言,所以不存在有类外部的定义
: 所有方法和变量都必需写在类里面,包括static变量和方法
: 那有些时候你需要一些临时的用完一次就不再用的类
: 把它单独写成一个class就显得麻烦
: 所以直接用匿名类包装一下,扔给一个object就好了

z****e
发帖数: 54598
5
第一个有些难了,标准答案可能是要用lambda时候用匿名类
第二个不需要知道内部类名字,只需要知道接口或者抽象类的名字
每次使用,都需要把类的implementation/实现紧跟在定义后面
进阶就说java8里面这个可以用lambda表达式,也就是->

【在 s********e 的大作中提到】
: 谢谢回复!
: 关于第一个问题,我也是回到说是在Swing UI开发中常用到匿名内部类,我感觉我的回
: 到不是他期望的,他承认我说的对,但是问我还有没有其他的例子,我就想不起来了。
: 第二个问题,我也是说了如果引用内部类,就是" 外部类.内部类'' 的方式,但是
: 他反复说,既然是匿名,那又如何知道内部类的名字呢? 没有名字,怎么能用这种方
: 式去找到呢?

s********e
发帖数: 340
6
谢谢,Java的 Lambda表达式,我需要去看一下。
关于第二个,我还是有点不太明白,比如:
Class OuterClass (){
public void abc(){
new InnerInterface(){
public inntermethod(){
.....
}
}
}
}
这个InnerInterface接口就产生了一个匿名内部类对象,这个匿名内部类对象该如何找
到?

【在 z****e 的大作中提到】
: 第一个有些难了,标准答案可能是要用lambda时候用匿名类
: 第二个不需要知道内部类名字,只需要知道接口或者抽象类的名字
: 每次使用,都需要把类的implementation/实现紧跟在定义后面
: 进阶就说java8里面这个可以用lambda表达式,也就是->

z****e
发帖数: 54598
7
InnerInterface innerInterface = new InnerInterface(){
@Override
public void innterMethod(){...}
};
...
innerInterface.innerMethod();
...
Y*****y
发帖数: 361
8
lambda和anonymous class都会compile成一个outerclass$XXX形式的样子,那个XXX一
般是很奇怪的名字。

【在 s********e 的大作中提到】
: 谢谢,Java的 Lambda表达式,我需要去看一下。
: 关于第二个,我还是有点不太明白,比如:
: Class OuterClass (){
: public void abc(){
: new InnerInterface(){
: public inntermethod(){
: .....
: }
: }
: }

s********e
发帖数: 340
9
谢谢! 看来我要好好研究一下Lambda!

【在 Y*****y 的大作中提到】
: lambda和anonymous class都会compile成一个outerclass$XXX形式的样子,那个XXX一
: 般是很奇怪的名字。

g*****g
发帖数: 34805
10
匿名内部类是因为没有 lamda,而之所以这样就是因为其他地方不需要引用,这样写简
洁。外部既然不能访问问外部怎么访问就是个错误命题了。
c***n
发帖数: 809
11
匿名内部类好处是相关code在一起,一个简单的interface implemetation,
别的地方又不重复利用。 常用在callback/strategy之类的class里。
还有一个好出是可以access outer class的变量, 没必要些那些boilerplate

【在 s********e 的大作中提到】
: 我前几天面试,被问到Java 匿名内部类:
: 1. 什么情况下用到匿名内部类?(我的理解是他想问为什么需要使用匿名内部类)
: 2. 如何找到匿名内部类的对象,他说,因为是匿名的,那么在匿名内部类产生对象后
: , 我如何找到这个匿名的内部类对象?
: 第2个问题,我尤其不太明白答案。
: 请教大家这两个问题,欢迎讨论!

1 (共1页)
进入JobHunting版参与讨论
相关主题
Java 面试题Java8 Lambda expression看不懂怎么办?
平时做项目干工作都是用python,面试用java可以吗?面试用lambda,stream好不好
贡献一个Java 程序 面试题,看不懂为啥。请指教!java8 的Lambda 有没有人用
请教一个 Set 的Java面试题Scala还值得学吗?
现在面试可以用Java8吗?哪位大牛来比较一下 java, python, scala
有人能说清什么是lambda architecture 么现在面试还有人问java基础么?
有时候java 8也是傻逼有做SRE想换工作的吗?
碰到奇葩组(组员)征友做一起面试题
相关话题的讨论汇总
话题: 匿名话题: 内部话题: java话题: 对象