匿名类&本地类&默认方法

匿名类指的是在声明一个类的同时实例化它,使代码更加简洁精练
通常情况下,要使用一个接口或者抽象类,都必须创建一个子类

有的时候,为了快速使用,直接实例化一个抽象类,并“当场”实现其抽象方法。
既然实现了抽象方法,那么就是一个新的类,只是这个类,没有命名。
这样的类,叫做匿名类


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); // 这里的结果是 ADHero类
          
         Hero h = new Hero(){ // 这里本来不能实例化一个抽象类,但由于在其实例
             //当场实现attack方法 // 后面写出了抽象方法,因此相当于新建一个类
             public void attack() {
                 System.out.println( "新的进攻手段" );
             }
         };
         h.attack();
         //通过打印h,可以看到h这个对象属于Hero$1这么一个系统自动分配的类名
          
         System.out.println(h); // 这里的结果是 Hero$1类 系统自动起的新类(匿
     }
       // 明类)
}

本地类可以理解为有名字的匿名类 
与内部类不一样的是,内部类必须声明在成员的位置,即与属性和方法平等的位置。 
本地类和匿名类一样,直接声明在代码块里面,可以是主方法,for循环里等等地方


public abstract class Hero {
     String name; //姓名
          
     float hp; //血量
          
     float armor; //护甲
          
     int moveSpeed; //移动速度
      
     public abstract void attack();
      
     public static void main(String[] args) {
          
         //与匿名类的区别在于,本地类有了自定义的类名
         class SomeHero extends Hero{
             public void attack() {
                 System.out.println( name+ " 新的进攻手段" );
             }
         }
         
         SomeHero h  = new SomeHero();
         h.name = "地卜师" ;
         h.attack();
     }
      
}

默认方法是JDK8新特性,指的是接口也可以提供具体方法了,而不像以前,只能提供抽象方法

Mortal 这个接口,增加了一个默认方法 revive,这个方法有实现体,并且被声明为了default


public interface Mortal {
     public void die();
 
     default public void revive() {
         System.out.println( "本英雄复活了" );
     }
}
假设没有默认方法这种机制,那么如果要为Mortal增加一个新的方法revive,那么所有实现了Mortal接口的类,都需要做改动。

但是引入了默认方法后,原来的类,不需要做任何改动,并且还能得到这个默认方法

通过这种手段,就能够很好的扩展新的类,并且做到不影响原来的类


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值