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();/编译失败,因为父类没有这个方法。
        }
    
    }
  • 相关阅读:
    笔记44 Hibernate快速入门(一)
    tomcat 启用https协议
    笔记43 Spring Security简介
    笔记43 Spring Web Flow——订购披萨应用详解
    笔记42 Spring Web Flow——Demo(2)
    笔记41 Spring Web Flow——Demo
    Perfect Squares
    Factorial Trailing Zeroes
    Excel Sheet Column Title
    Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/8042371.html
Copyright © 2011-2022 走看看