黑马程序员技术交流社区

标题: . [打印本页]

作者: 冯祖焱    时间: 2012-2-15 16:07
标题: .
本帖最后由 冯祖焱 于 2017-8-16 09:55 编辑

                                                             .
作者: 刘基军    时间: 2012-2-15 16:30
1.
new B()
{
    private int i=1;
    public int value()
    {
        return i;
    }
}
这表示:创建一个B类的子类的对象

2.
B bb=a.b(); //对象a调用其b()方法,由于返回值是B类型,所以“=”左边必须定义bb的类型为:B

3.代码不全,还缺少B类的定义,添加如下,可以编译成功:
  1. class A
  2. {
  3.         public B b()
  4.         {
  5.                 return new B()
  6.                 {
  7.                         private int i=1;
  8.                         public int value()
  9.                         {
  10.                                 return i;
  11.                         }
  12.                 };
  13.         }
  14.        
  15.         public static void main(String[] args)
  16.         {
  17.                 A a=new A();
  18.                 B bb=a.b();
  19.         }
  20.        
  21. }
  22. class B
  23. {
  24.        
  25. }
复制代码

作者: 钟保罗    时间: 2012-2-15 16:43
  1. public B b(){
  2. return new B(){
  3. private int i=1;
  4. public int value(){return i;}
  5. };
复制代码
是在b方法里面new一个B类中的匿名内部类!
  1. public static void main(String[] args){
  2. A a=new A();
  3. B bb=a.b();
  4. }
  5. }
复制代码
创建一个A类的对象,a.b();调用了A类中b的方法,在这个方法中创建了一个B类中的内部类,并返回出去,用bb变量接收了返回出来的匿名内部类的对象,因为这个匿名内部类B类里面的,所以bb变量就用B类型来接收。。。。。
作者: 毛溯澜    时间: 2012-2-15 20:03
B bb=a.b();多态,a.b()返回的是B的匿名子类对象,个人见解
作者: 魏腾飞    时间: 2012-2-15 21:22
本帖最后由 魏腾飞 于 2012-2-15 21:22 编辑

求认可···我进行了拆分,你看看对吧。也希望比较懂行的给点批评和建议。
public class A {
        class B {
                private int i = 1;

                public int value() {
                        return i;
                }
        }

        public B b() {
                System.out.println("hah");
                return new B();
        }

        public static void main(String[] args) {

                A a = new A();

                B bb = a.b();

        }

}

作者: 刘豪杰    时间: 2012-2-16 10:16
一般要访问的内部类中定义的方法不超过三个时,会用匿名内部类来代替内部类的代码,主要就是为了简写代码,其实和内部类并没有太大区别




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