什么是接口和匿名内部类

什么是接口和匿名内部类

接口:

    java中的接口定义:多个抽象类的抽象就是接口.
    Java中的接口表示规范,用于定义一组抽象方法,表示某一类事物必须具备的功能,要求实现类必须来实现该接口并提供方法实现.
    Java接口的方法只能是抽象的和公开的,Java接口不能有构造器。
  • 1
  • 2
  • 3
  • 4

匿名内部类:

匿名内部类也就是没有名字的内部类
  • 1
  • 2

正因为没有名字,所以匿名内部类只能使用一次,通常它用来简化代码关系编写 
但使用匿名来自内部类还有个前提条件:必须继承一个父类或实现一个接口

这是实现了一个动物类中继承的dog,Flyable,Swimable,在main函数调用的时候实现了匿名内部类,
  • 1
  • 2
public class MainClass {

    public static void main(String[] args) {
        Animal animal = new Duck();
        MainClass.test(animal);

        // 匿名内部类一般情况下只是重写父类的方法、实现接口的方法
        MainClass.watchDoor(new Animal(){
            String whisper() {
                return "汪汪";
            }
        });

        MainClass.flyGePassBook(new Flyable() {
            public void fly() {
                System.out.println("飞");
            }
        });

        MainClass.fishSwimming(new Swimable() {
            public void swim() {
                System.out.println("游");
            }
        });
        }
    }

  • 1
  • 2
  • 3
  • 4
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
public class Animal {
    String name;
    String whisper() {
        return null;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 6
public class Dog extends Animal {
    String whisper() {
        return "汪汪";
    }
}
  • 1
  • 2
  • 3
  • 4
public interface Flyable {
    public void fly();
}
  • 1
  • 2
  • 3

public interface Swimable {
    public void swim();
}
  • 1
  • 2
  • 3
  • 4

还用一种情况就是接口中使用匿名内部类:

这是一个接口动物

interface Animal {
    String name = "动物一只";

    public abstract void wawaWangwang();
    /*Animal a=new Animal() {   
        @Override
        public void wawaWangwang() {
            // TODO Auto-generated method stub

        }
    };*/
}
  • 1
  • 2
  • 3
  • 4
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这是实现类的主类:

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

        MainClass.test(new Animal() {
            public void wawaWangwang() {
                System.out.println("旺旺");
            }
        });
    }

    static void test(Animal animal) {
        System.out.println(Animal.name);
        animal.wawaWangwang();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在MainClass.test();这个方法中由于调用的测试方法有一个动物的形参;所以我们需要传入一个形参来实现方法,测试方法实现了动物中方法wangwang的调用,MainClass调用测试方法。 
动物是一个接口,我们需要一个类去实现接口,于是创建一个匿名内部类, 
可以看见,匿名内部类中重写了动物中的方法,对接口进行了实现。 
注意的是:在动物接口中被注释的代码,事实上也是一种匿名类(可以给新手用来装逼的一点),只是这个匿名类类被接收了。

猜你喜欢

转载自blog.csdn.net/qiuzhongweiwei/article/details/80743911