首页 > 编程语言 > 详细

java学习之内部类、匿名内部类

时间:2017-12-15 13:14:39      阅读:192      评论:0      收藏:0      [点我收藏+]

内部类定义在局部时:

  1.不可以被成员修饰符修饰

  2.可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量

package com.dreamy.day04;

/**
 * @author dreamy
 *
 */
class Outer{
    int x=3;
    void method(final int a) {
        final int y=4;
        class Inner{
            void function() {
                System.out.println(a);
            }
        }
        new Inner().function();
    }
}
public class InnerClassDemo01 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Outer out=new Outer();
        out.method(7);
        out.method(8);
    }

}

 

匿名内部类:

1.匿名内部类其实就是内部类的简写格式。

2.定义匿名内部类的前提:

  内部类必须是继承一个类或者实现接口。

3.匿名内部类的格式:new 父类或者接口(){ 定义子类的内容 };

4.其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。可以理解为带内容的对象。

package com.dreamy.day04;

/**
 * @author dreamy
 *
 */

abstract class AbsDemo{
    abstract void show();
}

class Outer{
    int x=3;
    /*
    class Inner extends AbsDemo{
        void show() {
            System.out.println("show:"+x);
        }
    }
    */
    public void function() {
        //new Inner().show();
        /*匿名内部类1:
        new AbsDemo() {
            void show() {
                System.out.println("show:"+x);
            }
        };
        */
        
        //匿名内部类2:
        //new Inner().show();
        new AbsDemo() {
            @Override
            void show() {
                System.out.println("x==="+x);
            }
        }.show();
    }
}

public class InnerClassDemo01 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        new Outer().function();
    }

}

5.匿名内部类中定义的方法最好不要超过3个

package com.dreamy.day04;

/**
 * @author dreamy
 *
 */

abstract class AbsDemo{
    abstract void show();
}

class Outer{
    int x=3;
    /*
    class Inner extends AbsDemo{
        void show() {
            System.out.println("show:"+x);
        }
    }
    */
    public void function() {
        //new Inner().show();
        /*匿名内部类1:
        new AbsDemo() {
            void show() {
                System.out.println("show:"+x);
            }
            void abc(){
                System.out.println("haha");
            }
        };
        */
        
        //匿名内部类2:
        //new Inner().show();
        new AbsDemo() {
            @Override
            void show() {
                System.out.println("x==="+x);
            }
            void abc() {
                System.out.println("haha");
            }
        }.abc();
    }
}

public class InnerClassDemo01 {

    /**
     * @param args
     */
    public static void main(String[] args) {
//        new Outer().function();
        //AbsDemo a=new Inner();
        AbsDemo d=new AbsDemo() {
            @Override
            void show() {
                System.out.println("x==="+x);
            }
            void abc() {
                System.out.println("haha");
            }
        };
        d.show();
        //d.abc();/编译失败,因为父类没有这个方法。
    }

}
package com.dreamy.day04;

/**
 * @author dreamy
 *
 */

abstract class AbsDemo{
    abstract void show();
}

class Outer{
    int x=3;
    public void function() {
        //new Inner().show();
        /*匿名内部类1:
        new AbsDemo() {
            int num=9;
            void show() {
                System.out.println("num:"+num);
            }
            void abc(){
                System.out.println("haha");
            }
        };
        */
        
        //匿名内部类2:
        //new Inner().show();
        new AbsDemo() {
            int num=90;
            @Override
            void show() {
                System.out.println("x==="+num);
            }
            void abc() {
                System.out.println("haha");
            }
        }.show();
    }
}

public class InnerClassDemo01 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        new Outer().function();
        //AbsDemo a=new Inner();
        AbsDemo d=new AbsDemo() {
            int num=9;
            @Override
            void show() {
                System.out.println("num==="+num);
            }
            void abc() {
                System.out.println("haha");
            }
        };
        d.show();
        //d.abc();/编译失败,因为父类没有这个方法。
    }

}

 

java学习之内部类、匿名内部类

原文:http://www.cnblogs.com/zhaohuan1996/p/8042371.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!