zoukankan      html  css  js  c++  java
  • java基础之匿名内部类

    内部类:
      概述: 类里边还有一个类, 里边那个类叫内部类, 外边那个类叫外部类.
     

    分类:
      成员内部类: 定义在成员位置的内部类.
      局部内部类: 定义在局部位置的内部类.

    格式:
      new 类名或者接口名(){
        //重写类或者接口中 所有的 抽象方法;
      };

    本质:
      就是一个继承了类或者实现了接口的 匿名的子类对象. 匿名内部类不是类, 而是子类对象.


    匿名内部类的实际应用:
      1) 当对 对象方法(成员方法) 仅调用一次的时候.
      2) 可以作为方法的实参进行传递.

    建议:
      当接口中或者抽象类中的 抽象方法仅有一个的时候, 就可以 考虑使用匿名内部类.

    代码说明:

    public class DemoClass { //外部类
        
        String name;    //成员变量
        
        class Inner1 {    //成员内部类
            
        }
        
        //成员方法
        public void show() {
            int num = 10;    //局部变量, 基本类型
            
            Object obj = new Object();    //局部变量, 引用类型
            
            //局部内部类.   局部变量, 引用类型
            class Inner2{
                
            }
        }
    }

    应用举例:

    public static void main(String[] args) {                   
        // 对, Jumpping#jump(); 调三次.                            
        //1) 当对 对象方法(成员方法) 仅调用一次的时候.                           
        Jumping jm = new Jumping() {        //多态                                                            
            @Override                                          
            public void jump() {                               
                System.out.println("我会跳");                     
            }                                                                                               
        };                                                     
        jm.jump();                                             
        jm.jump();                                             
        jm.jump();                                             
                                                               
        //2) 可以作为方法的实参进行传递.                                    
        show(new Jumping() {                                   
                                                               
            @Override                                          
            public void jump() {                               
                System.out.println("我会跳, 可以作为方法的实参进行传递");      
            }                                                  
        });                                                    
    }                                                          
                                                               
                                                               
    public static void show(Jumping jm) {                      
        jm.jump();                                             
    }                                                          
    
    public interface Jumping {
        final public static int num = 10;
        
        
        public abstract void jump();
    }
    public static void main(String[] args) {                  /*                                                    
         *  通过匿名内部类实现.                                    
         *  new 类名或者接口名(){                                    
             //重写类或者接口中 所有的 抽象方法;                          
            };                                                
         */                                                   
        new Animal() {                                        
            public void eat() {                               
                System.out.println("我是匿名内部类的方式实现的, 猫吃鱼");     
            }                                                 
        }.eat();                                              
    }                                                         
    
    /**
     * 抽象类: Animal
     * @author
     *
     */
    public abstract class Animal {
        public abstract void eat();
    }
  • 相关阅读:
    luoguP2939 [USACO09FEB]改造路Revamping Trails
    出题
    数字游戏
    统一异常处理
    数据验证
    拦截器
    数据绑定和表单标签库
    类型转换和格式化
    Spring MVC入门
    4springboot:日志(下)
  • 原文地址:https://www.cnblogs.com/blazeZzz/p/9153747.html
Copyright © 2011-2022 走看看