黑马程序员技术交流社区

标题: 小知识点12 [打印本页]

作者: 正哥敲代码    时间: 2016-8-8 23:32
标题: 小知识点12
27、内部类可以引用它的包含类的成员吗?有没有什么限制?
完全可以。如果不是静态内部类,那没有什么限制!
如果你把静态嵌套类当作内部类的一种特例,那在这种情况下不可以访问外部类的普通成员变量,而只能访问外部类中的静态成员,例如,下面的代码:
class Outer
{
staticint x;
staticclass Inner
{
           voidtest()
           {
                    syso(x);
           }
}
}
答题时,也要能察言观色,揣摩提问者的心思,显然人家希望你说的是静态内部类不能访问外部类的成员,但你一上来就顶牛,这不好,要先顺着人家,让人家满意,然后再说特殊情况,让人家吃惊。
28Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
可以继承其他类或实现其他接口。不仅是可以,而是必须!
29super.getClass()方法调用
下面程序的输出结果是多少?
import java.util.Date;
public  class Testextends Date{
    public static void main(String[] args) {
       new Test().test();
    }
   
    public void test(){
       System.out.println(super.getClass().getName());
    }
}
很奇怪,结果是Test

这属于脑筋急转弯的题目,在一个qq群有个网友正好问过这个问题,我觉得挺有趣,就研究了一下,没想到今天还被你面到了,哈哈。
test方法中,直接调用getClass().getName()方法,返回的是Test类名
由于getClass()Object类中定义成了final,子类不能覆盖该方法,所以,在
test方法中调用getClass().getName()方法,其实就是在调用从父类继承的getClass()方法,等效于调用super.getClass().getName()方法,所以,super.getClass().getName()方法返回的也应该是Test
如果想得到父类的名称,应该用如下代码:
getClass().getSuperClass().getName();






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2