接口(interface)
1)特点
①接口是一个特殊的抽象类,本质就是只有抽象方法和静态常量的抽象类。
②接口中所有的方法都默认是公开的抽象方法。
③所有的属性默认是公开的静态常量(static final)。
接口中的所定义的属性都是静态常量,既然是常量就要对其进行初始化。
④通过一个类实现接口来使用接口中所定义的抽象方法。
⑤一个类实现(implement)一个接口要实现接口中的所有抽象方法。
接口:
package Review.Interfaces;
public interface IAnimal {
int age = 10;
void run();
void eat();
void sleep();
}
实现类:
package Review.Interfaces;
public class Dog implements IAnimal{
@Override
public void run() {
System.out.println("Dog---run");
}
@Override
public void eat() {
System.out.println("Dog---eat");
}
@Override
public void sleep() {
System.out.println("Dog---sleep");
}
}
⑥接口可以被继承,但抽象类和普通类不能继承接口(接口只能继承接口)。
⑦一个类可以实现多个接口(多个接口中方法不能发生冲突(非重载方法)),一个类实现多个接口的同时还可以继承一个类(先继承后实现),一定程度上解决java中的单一继承问题。
2)使用
以多态的方式使用接口
①方法的参数类型一般是接口引用类型(接收当前接口的所有实现类)。
②方法的返回值类型一般是接口引用类型。
③创建一个实现类对象时,也会使用接口类型去接收实现类对象。
接口:
package Review.Interfaces;
public interface IAnimal {
void run();
void eat();
void sleep();
}
实现类Dog:
package Review.Interfaces;
public class Dog implements IAnimal{
@Override
public void run() {
System.out.println("Dog---run");
}
@Override
public void eat() {
System.out.println("Dog---eat");
}
@Override
public void sleep() {
System.out.println("Dog---sleep");
}
}
实现类Cat:
package Review.Interfaces;
public class Cat implements IAnimal{
@Override
public void run() {
System.out.println("cat----run");
}
@Override
public void eat() {
System.out.println("cat----eat");
}
@Override
public void sleep() {
System.out.println("cat----sleep");
}
}
测试类:
package Review.Interfaces;
public class Test {
public static void main(String[] args) {
IAnimal Dog = new Dog();
IAnimal Cat = new Cat();
printKinds(Dog);
printKinds(Cat);
}
public static void printKinds(IAnimal a) {
a.run();
a.eat();
a.sleep();
}
}