概念 :
/**
* 接口
*
* @author LXL 2017年5月10日
*/
interface Interface1 {
/**
* 接口的结构和抽象类相似, 也具有数据成员和抽象方法.
* interface关键字, 表明这是一个接口
*/
/**
* 接口和抽象类的区别 :
* 1. 接口里的数据成员必须初始化, 且数据成员均为常量.
* 对于在接口中定义的成员变量, 系统会自动为其加上final修饰符, 我们不能对其值进行修改.
* 2. 接口里的方法必须声明为 abstract ,
* 接口不能像抽象类那样有一般方法, 接口里的方法必须全是抽象方法.
*/
int i = 1; // 这里的数据成员必须赋初值,否则报红. 其实这个i被自动修饰成了final的
public abstract String talk();
}
public class Test implements Interface1 {
public static void main(String[] args) {
// i = i + 1;
// 上面那行会报红. 因为不能对其值进行修改
// 可以这样获得修改后的值 :
int n = Interface1.i + 1;
System.out.println(n); // 2
}
// 实现那个接口必须重写里面的这个方法
@Override
public String talk() {
return null;
}
}
使用 :
public interface InterfaceA {
int a = 10;
public void sayA();
}
public interface InterfaceB {
int b = 20;
public void sayB();
}
public interface InterfaceC extends InterfaceA, InterfaceB{
/**
* 一个接口可以同时继承多个接口, 也就同时继承了多个接口的抽象方法与常量
*/
int c = 30;
public void sayC();
}
public class TestABC implements InterfaceC{
/**
* InterfaceC 继承了A和B
* 所以这里实现InterfaceC需要重写ABC三个里面的抽象方法
*/
@Override
public void sayA() {
System.out.println("a = " + a);
}
@Override
public void sayB() {
System.out.println("a = " + a);
System.out.println("b = " + b);
}
@Override
public void sayC() {
System.out.println("c = " + c);
}
}
public class TestABC2 {
public static void main(String[] args) {
TestABC test = new TestABC();
test.sayB(); // a = 10 b = 20
}
}