zoukankan      html  css  js  c++  java
  • 【3】匿名内部类

    1.什么是匿名类

    匿名类,就是没有名称的类,其名称由Java编译器给出,一般是形如:

    ​ 外部类名称+$+匿名类顺序,没有名称也就是其他地方就不能引用,不能实例化,只用一次,当然也就不能有构造器。

    • 匿名类就是利用父类的构造函数和自身类体构造成一个类
    • 格式:new 父类{}{子类内容};
    2.为什么要使用匿名类

    匿名类指的是在声明一个类的同时实例化它,使代码更加简洁精练

    3.匿名类怎么使用
    package charactor;
      
    public abstract class Hero {
        String name; //姓名
             
        float hp; //血量
             
        float armor; //护甲
             
        int moveSpeed; //移动速度
         
        public abstract void attack();
         
        public static void main(String[] args) {
             
            ADHero adh=new ADHero();
            //通过打印adh,可以看到adh这个对象属于ADHero类
            adh.attack();
            System.out.println(adh);
             
            Hero h = new Hero(){
                //当场实现attack方法
                public void attack() {
                    System.out.println("新的进攻手段");
                }
            };
            h.attack();
            //通过打印h,可以看到h这个对象属于Hero$1这么一个系统自动分配的类名
             
            System.out.println(h);
        }
         
    }
    
    
    4.注意事项

    在匿名类中使用外部的局部变量,外部的局部变量必须修饰为final

    package charactor;
       
    public abstract class Hero {
     
        public abstract void attack();
          
        public static void main(String[] args) {
     
            //在匿名类中使用外部的局部变量damage 必须修饰为final
            int damage = 5;
             
            //这里使用本地类AnonymousHero来模拟匿名类的隐藏属性机制
             
            //事实上的匿名类,会在匿名类里声明一个damage属性,并且使用构造方法初始化该属性的值
            //在attack中使用的damage,真正使用的是这个内部damage,而非外部damage
             
            //假设外部属性不需要声明为final
            //那么在attack中修改damage的值,就会被暗示为修改了外部变量damage的值
             
            //但是他们俩是不同的变量,是不可能修改外部变量damage的
            //所以为了避免产生误导,外部的damage必须声明为final,"看上去"就不能修改了
            class AnonymousHero extends Hero{
                int damage;
                public AnonymousHero(int damage){
                    this.damage = damage;
                }
                public void attack() {
                    damage = 10;
                    System.out.printf("新的进攻手段,造成%d点伤害",this.damage );
                }
            }
             
            Hero h = new AnonymousHero(damage);
             
        }
          
    }
    
    不破不立,怕啥怼啥!
  • 相关阅读:
    fpga配置方式 .jic固化为ps模式
    fpga新建nios
    四轴飞行器飞行原理与双闭环PID控制
    fpga为什么要用nios 开发
    error A space is required after ',' comma-spacing
    vuex : Newline required at end of file but not found eol-last
    vue -Missing space before value for key 'path'vue.js解决空格报错
    visual studio 自动补全功能 以及代码没有颜色
    hadoop 伪分布模式环境搭建
    django框架-DRF工程之认证功能
  • 原文地址:https://www.cnblogs.com/yslu/p/13277421.html
Copyright © 2011-2022 走看看