一、定义接口
[修饰符] interface 接口名 [extends 父接口名列表] {
[public] [static] [final] 常量;
[public] [abstract] 方法;
}
二、接口的继承
interface interfaceA{
int one = 1;
void sayA();
}
interface interfaceB{
int two = 2;
void sayB();
}
interface interfaceC extends interfaceA, interfaceB{
int three = 3;
void sayC();
}
public class app {
public static void main(String[] args) {
System.out.println(interfaceC.one);
System.out.println(interfaceC.two);
System.out.println(interfaceC.three);
}
}
三、接口的实现
[修饰符] class <类名> [extends 父类名] [implements 接口列表] {
}
每个类只能实现单重继承,而实现接口时,一次则可以实现多个接口
interface Calculate{
final float PI = 3.14159f;
float getArea(float r);
float getCircumference(float r);
}
interface GeometryShape{
final float PI = 3.14159f;
float getArea(float r);
float getCircumference(float r);
void draw();
}
public class Circ {
public float getArea(float r) {
float area = Calculate.PI*r*r;
return area;
}
public float getCircumference(float r) {
float circumference = 2*Calculate.PI*r;
return circumference;
}
public void draw() {
System.out.println("画一个圆形!");
}
public static void main(String[] args) {
Circ circ = new Circ();
float r = 7;
float area = circ.getArea(r);
System.out.println("圆的面积为:"+area);
float circumference = circ.getCircumference(r);
System.out.println("圆的周长为:"+circumference);
circ.draw();
}
}
四、接口和抽象类
接口和抽象类的共同点如下:
(1)接口与抽象类都不能被实例化,能被其他类实现和继承。
(2)接口和抽象类中都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。
接口和抽象类的用法差别如下:
(1)接口中只能包含抽象方法,不能包含普通方法;抽象类中可以包含普通方法。
(2)接口中不能定义静态方法;抽象类中可以定义静态方法。
(3)接口中只能定义静态常量属性,不能定义普通属性;抽象类里可以定义静态常量属性,也可以定义普通属性。
(4)接口不能包含构造器;抽象类可以包含构造器,抽象类里的构造器是为了让其子类调用并完成初始化操作。
(5)接口中不能包含初始化块,但抽象类可以包含初始化块。
(6)一个类最多只能有一个直接父类,包含抽象类;但是一个类可以实现多个接口。
五、接口回调
interface People{ //定义接口
void Say(String s);
}
class Teacher implements People{ //Teacher实现接口
@Override
public void Say(String s) {
System.out.println(s);
}
}
class Student implements People{ //Student实现接口
@Override
public void Say(String s) {
System.out.println(s);
}
}
public class app1 {
public static void main(String[] args) {
People tea; //声明接口变量
tea = new Teacher(); //接口变量中存放对象的引用
tea.Say("我是老师"); //接口回调
tea = new Student(); //接口变量中存放对象的引用
tea.Say("我是学生"); //接口回调
}
}
六、接口与多态
interface Animals{
void Eat(String s);
}
class Dog implements Animals{
@Override
public void Eat(String s) {
System.out.println("我是小狗,我爱吃"+s);
}
}
class Cat implements Animals{
@Override
public void Eat(String s) {
System.out.println("我是小猫,我爱吃"+s);
}
}
public class Example {
public static void main(String[] args) {
Animals ani;
ani = new Dog();
ani.Eat("骨头");
ani = new Cat();
ani.Eat("鱼");
}
}
七、接口参数
interface Eatfood{
void Eatfood();
}
class Chinese implements Eatfood{
@Override
public void Eatfood() {
System.out.println("中国人习惯用筷子");
}
}
class America implements Eatfood{
@Override
public void Eatfood() {
System.out.println("美国习惯用刀叉");
}
}
class EatMethods{
public void lookEatMethods(Eatfood eat) { //定义接口参数类型
eat.Eatfood(); //接口回调
}
}
public class Example2 {
public static void main(String[] args) {
EatMethods em = new EatMethods();
em.lookEatMethods(new Chinese());
em.lookEatMethods(new America());
}
}