接口語法
1.接口是一種引用類型,可以等同看作類。修飾符 interface 接口名
2.接口中只能出現常量和抽象方法
3.接口其實是一個特殊的抽象類,特殊在接口是完全抽象的
4.接口中沒有構造方法,接口也無法實例化
5.接口和接口之間可以多繼承
6.一個類可以實現多個接口,這里的實現等同於繼承
7.一個非抽象的類實現接口,需要將接口中所有方法實現/重寫/覆蓋
#java
package study1;
public interface A{
//常量都是public static final,可省略
public static final String sucess = "SUCCESS";
public static final double pi = 3.14;
byte max_value = 127;
//接口中所有的抽象方法都是public abstract,
public abstract void m1();
//接口方法不能有方法體,如 void m22(){};會提示interface abstract methods cannot have body
void m2();
interface B{
void m1();
}
interface C{
void m2();
}
interface D{
void m3();
}
interface E extends B,C,D{
void m4();
}
/*
extends只能單繼承,implements可以多繼承
如果實現的接口有多個方法,必須覆蓋接口中的方法。
*/
class MyClass implements B,C{
public void m2(){}
public void m1(){}
}
class MyClass2 implements E{
public void m1(){};
public void m2(){};
public void m3(){};
public void m4(){};
}
}
接口的作用
#java
package date818;
/**
* 接口的作用:
* 1。可以使項目分離,所有層都面向接口開發,提高開發效率
* 2。接口是代碼和代碼之間的耦合度降低。變得可插拔,可以隨意切換。
* 3。接口和抽象類都能完成某個功能,優先選擇接口,因為接口可以多實現,多繼承。並且一個類除了接口之外,還可以繼承其他類
*/
public interface CustomerService {
//定義一個推出系統的方法
void logout();
}
package date818;
//接口實現類1
public class CustomerServierImpl implements CustomerService {
public void logout(){
System.out.println("成功退出系統");
}
}
package date818;
//接口實現類2
public class CustomerServiceImpl2 implements CustomerService{
public void logout(){
System.out.println("hello world");
}
}
package date818;
public class TestCustomer {
public static void main(String[] args){
//需要執行CustomerServiceImpl和CustomerImpl2接口實現類中的logout方法
//以下程序面向接口調用
CustomerService cs = new CustomerServierImpl();//多態。父類型引用指向子類型對象
//調用
cs.logout();
CustomerService cs2 = new CustomerServiceImpl2();
cs2.logout();
}
}
#java
//定義接口
package date818;
public interface Engine {
//所有發動機都可以通過這個接口啟動
void start();
}
//定義實現接口的類
package date818;
public class Honda implements Engine{
public void start(){
System.out.println("本田啟動");
}
}
package date818;
public class Ymaha implements Engine{
public void start(){
System.out.println("雅馬哈啟動");
}
}
//定義生產汽車的類
package date818;
public class Car {
//面向接口編程,不能將類實例化
/**
* 引用接口定義一個屬性e,相當於
* String name;
* Integer age;
* 類里定義的變量是成員變量;方法里定義的變量是局部變量。
*/
Engine e ;//成員變量e
Car(Engine e){
//定義構造方法,把局部變量e賦值給成員變量
this.e=e;
}
//對外提供的測試方法
public void testEngine(){
//成員變量e
e.start();
}
}
//定義測試類
package date818;
public class TestCar {
public static void main(String[] args){
//生產引擎
Engine e = new Ymaha();
//根據構造方法傳入參數生產汽車
Car c = new Car(e);
//測試引擎
c.testEngine();
c.e = new Honda();//已經定義了一個實例,直接對實例的參數修改即可
c.testEngine();
}
}
雅馬哈啟動
本田啟動