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();/编译失败,因为父类没有这个方法。
        }
    
    }
  • 相关阅读:
    cinder支持nfs快照
    浏览器输入URL到返回页面的全过程
    按需制作最小的本地yum源
    创建可执行bin安装文件
    RPCVersionCapError: Requested message version, 4.17 is incompatible. It needs to be equal in major version and less than or equal in minor version as the specified version cap 4.11.
    惠普IPMI登陆不上
    Linux进程状态——top,ps中看到进程状态D,S,Z的含义
    openstack-neutron基本的网络类型以及分析
    openstack octavia的实现与分析(二)原理,架构与基本流程
    flask上下文流程图
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/8042371.html
Copyright © 2011-2022 走看看