码迷,mamicode.com
首页 > 其他好文 > 详细

【3】匿名内部类

时间:2020-07-10 09:57:32      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:注意   rgs   移动   actor   匿名内部类   string   引用   class   anon   

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);
         
    }
      
}

【3】匿名内部类

标签:注意   rgs   移动   actor   匿名内部类   string   引用   class   anon   

原文地址:https://www.cnblogs.com/yslu/p/13277421.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!