什么是接口和匿名内部类
接口:
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调用测试方法。
动物是一个接口,我们需要一个类去实现接口,于是创建一个匿名内部类,
可以看见,匿名内部类中重写了动物中的方法,对接口进行了实现。
注意的是:在动物接口中被注释的代码,事实上也是一种匿名类(可以给新手用来装逼的一点),只是这个匿名类类被接收了。