《匿名类》

创建一个包NiMing,下面有一个抽象类Animal

Animal抽象类:

package NiMing;

public abstract class Animal {
    public  abstract  void eat();

}

再创建一个Test类用于测试:

package NiMing;

public class Test {
    public static void main(String[] args) {

       

    }

}

因为抽象类是不可以实例化的,如果我们要实现Animal类,那么我们可以再次创建另一个类来继承它,并且重写它的所有抽象方法。

比如说我们可以创建一个Dog类来继承Animal类,然后通过Dog类来new一个对象,通过对象来调用eat()方法,如下

package NiMing;

public class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗在吃东西");
    }
}
package NiMing;

public class Test {
    public static void main(String[] args) {
     Dog d=new Dog();
     d.eat();
    }
}

但这样太麻烦了,我们为了实现调用eat()方法使其具体化,不得不特意创建一个Dog类,在其中重写这个方法,特别麻烦。 由此我们可以使用匿名类。

以下是匿名类的格式:

我们将刚刚的代码用匿名类来实现:

形式1

package NiMing;

public class Test {
    public static void main(String[] args) {

   new Animal(){
       @Override
       public void eat() {
           System.out.println("狗吃东西");
       }
   }.eat();

    }
}

当然,也可以这样来实现:

形式2

package NiMing;

public class Test {
    public static void main(String[] args) {

  Animal a= new Animal(){
       @Override
       public void eat() {
           System.out.println("狗吃东西");
       }
   };

  a.eat();

    }

}

其实,我们可以这样理解:

把上图红圈内的内容看成一个对象,这个对象属于一个没有名字的类,这个没有名字的类继承自Animal抽象类,因而这个对象当然就可以调用eat()方法了。

为了更好的理解,写出以下代码:

method()方法需要的参数是Animal的子类对象,在上面代码中,红圈中的内容就相当于Animal的子类对象。

上述接口类如是。

即使不是抽象类和接口,一般的函数也可以通过匿名类来重写类中方法,而不用修改原类中的方法,达到多态的效果

需要注意的是抽象类或接口,在使用匿名类时要重写所有的抽象方法,否则会报错

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值