黑马程序员技术交流社区

标题: 谁能讲讲匿名内部类? [打印本页]

作者: 汐枫wait    时间: 2015-12-19 23:30
标题: 谁能讲讲匿名内部类?
谁能讲讲匿名内部类?
作者: 214652440    时间: 2015-12-19 23:38
内部类我了解也不多,老师说的是安卓以后用的相对来说会很多,
内部类简单的来说就是一个类中包含了另一个类
那么内部类特点是,内部类可以直接使用外部类的成员属性,而外部类想要调用内部类的方法就需要创建内部类的对象
我记得我刚写过的一道题
public class Test8 {
        public static void main(String[] args) {
                B b = new A().new B();
                b.func();
               
               
        }
}
class A {
        int x = 1;
        class B {
                int x = 2;
                void func(){
                        int x = 3;
                        System.out.println("我是A中的X:"+A.this.x+"\t\t"+"我是B中的X:"+this.x+"\t\t"+"我是func方法中的X:"+x);
                }
        }
}
这个能够简单的说明内部类和外部类的成员属性如何调用的,
当然我理解的很粗糙,有什么新发现求指教
作者: 汐枫wait    时间: 2015-12-20 16:44
214652440 发表于 2015-12-19 23:38
内部类我了解也不多,老师说的是安卓以后用的相对来说会很多,
内部类简单的来说就是一个类中包含了另一个类
...

写的很好,谢谢了
作者: river1205    时间: 2015-12-20 18:41
匿名内部类是创建某个类型子类对象的快捷方式。
将定义子类与创建子类对象两个步骤由一个格式一次完成,多使用匿名对象的方式。
匿名内部类有两个步骤:
临时定义一个类型的子类
定义后即刻创建刚刚定义的这个类的对象
虽然是两个步骤,但是两个步骤是连在一起的、即时的。
格式:
        new 父类(){
                //重写需要重写的方法
};
       
        例如:
                已经存在的父类:
public abstract class Person{
                        public abstract void eat();
}
定义并创建该父类的子类对象,并用多态的方式赋值给父类引用变量
Person  p = new Person(){
                        public void eat() {
                                System.out.println(“我吃了”);
}
};
作者: li_joy99    时间: 2015-12-21 09:58
river1205 发表于 2015-12-20 18:41
匿名内部类是创建某个类型子类对象的快捷方式。
将定义子类与创建子类对象两个步骤由一个格式一次完成,多 ...

你这个例子举的不好,
1、你这个 父类(抽象类)定义成接口更合适,匿名内部类实现这个接口。
2、利用多态的方法,这种表述听起来怪怪的,多态是一种特征,不是一种方法。
作者: river1205    时间: 2015-12-21 21:13
li_joy99 发表于 2015-12-21 09:58
你这个例子举的不好,
1、你这个 父类(抽象类)定义成接口更合适,匿名内部类实现这个接口。
2、利用多 ...

我是举个例子,而且我说的是多态的方式
作者: 洪志豪1994    时间: 2015-12-21 22:12
类中有个类,就是内部类
作者: xiaodongwubukun    时间: 2015-12-22 00:37
里面有两个概念,一个是匿名,一个是内部类
匿名的意思,用完就扔掉,在内存中驻留时间短
内部类,就是一个类在另一个类内部,其实本质上是一个对象.

一句话,在一个对象内部使用了一个没有名字的临时对象.




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