zoukankan      html  css  js  c++  java
  • java学习之内部类、匿名内部类

    内部类定义在局部时:

      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();/编译失败,因为父类没有这个方法。
        }
    
    }
  • 相关阅读:
    mysql 之 union 分类: database 测试 2014-02-12 11:59 218人阅读 评论(0) 收藏
    MySql模糊查询like通配符使用详细介绍 分类: database 测试 2014-02-12 10:19 6829人阅读 评论(1) 收藏
    sed(查找替换) 与awk(提取字段) 分类: ubuntu 测试 2014-02-11 12:08 4074人阅读 评论(0) 收藏
    Linux命令行uniq 分类: ubuntu 测试 2014-02-10 17:52 341人阅读 评论(0) 收藏
    n&1判断奇偶 分类: python基础学习 测试 2014-02-10 15:41 636人阅读 评论(0) 收藏
    vue-cli安装
    input事件
    Edusohu搭建
    Ngxin代理服务基本概述
    五种IO模型---转载
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/8042371.html
Copyright © 2011-2022 走看看