Java中介面的概述及特點
1.介面的概述及特點
* A:介面概述
* 從狹義的角度講就是指java中的interface
* 從廣義的角度講對外提供規則的都是介面
* B:介面的特點
* 介面用關鍵字interface表示
* interface 介面名{}
* 類實現介面用implements 介面名{}
* class 類名implemts介面名{}
* 介面不能例項化
* 那麼,介面如何例項化呢?
* 按照多型的方式例項化。
* 介面的子類
* a:可以是抽象類,但是意義不大
* b:可以是具體類,但要重寫介面中所有的抽象方法,(推薦方案)
* C: 案例演示
* 介面的特點
程式碼:
public class Demo09_polymorphic {
public static void main(String[] args) {
//Cannot instantiate the type Inter
//Inter i = new Inter();//介面不能例項化因為呼叫抽象方法沒有意義
//按照多型的方式例項化。
Inter i = new Demo1(); // 相當於是多型,(父類引用指向子類物件)
i.print(); //編譯看左邊,執行看右邊 成員方法
}
}
// interface 介面名 {} 建立介面的方法
interface Inter {
public abstract void print(); //介面中的方法都是抽象的
}
//b:可以是具體類,但要重寫介面中所有的抽象方法,(推薦方案)
// 繼承用extends 介面實現用implements
class Demo1 implements Inter {
@Override
// 重寫介面print()的方法
public void print() {
System.out.println("printDemo");
}
}
2介面的成員特點
A:介面成員特點
* 成員變數:只能是常量,並且是靜態的並公共的。
* 預設修飾符:public static final---這三個單詞麼有順序
* 建議:自己手動給出
* 構造方法:介面沒有構造方法。
* 成員方法:只能是抽象方法。
* 預設修飾符:public abstract
* 建議:自己手動給出。
* B:案例演示
* 介面成員特點
程式碼:
public class Demo6_Interface {
public static void main(String[] args) {
InterSec interSec = new DemoSec(); // 父類引用指向子類的物件
interSec.print();
}
}
interface InterSec {
//預設修飾符:public static final
public static final int num = 10; // 只能是常量 開發中建議這樣寫
//public Inter() {}//介面沒有構造方法。Interfaces cannot have constructors
//只能是抽象方法。
/*public void print() {//Abstract methods do not specify a body
System.out.println("print");
}*/
public abstract void print(); // 抽象方法
}
class DemoSec implements InterSec { //
public void print() { // 重寫抽象方法
System.out.println(num);
}
}
3.類與類、類與介面、介面與介面之間的關係
A:類與類,類與介面,介面與介面的關係
* a:類與類:
* 繼承關係,只能單繼承,可以多層繼承
* b:類與介面
* 實現關係,可以單實現,也可以多實現。
* 並且還可以在繼承一個類的同時實現多個介面。
* c: 介面與介面:
* 繼承關係,可以單繼承,也可以多繼承。
程式碼:
public class Demo7_interface {
public static void main(String[] args) {
DemoA demoA = new DemoA();
demoA.printA();
demoA.printB();
demoA.printC();
}
}
// 第一個介面
interface InterA {
public abstract void printA(); // 抽象的方法A
}
// 第二個介面
interface InterB {
public abstract void printB(); // 抽象的方法B
}
//c: 介面與介面:
interface InterC extends InterA, InterB { //可以多繼承。
public abstract void printC();
}
//class Demo implements InterA,implements InterB{
//b:類與介面
class DemoA extends Object implements InterA, InterB, InterC {
// 重寫介面InterA的方法
@Override
public void printA() {
System.out.println("InterA");
}
// 重寫介面InterB的方法
@Override
public void printB() {
System.out.println("InterB");
}
// 重寫介面InterC的方法
@Override
public void printC() {
System.out.println("InterC");
}
}
4.抽象類與介面的區別
*A:成員區別
* 抽象類:
* 成員變數:可以變數,也可以常量
* 構造方法: 有
* 成員方法:可以抽象,也可以非抽象
* 介面:
* 成員變數:只可以常量
* 成員方法:只可以抽象
* B:關係區別
* 類與類
* 繼承,單繼承
* 類與介面
* 實現,單實現,多實現
* 介面與介面
* 繼承,單繼承,多繼承
* C:設計理念區別
* 抽象類 被繼承體現的是:“is a "關係,抽象類中定義的是該繼承體系的共性功能
* 介面 被實現體現的是“is like" 的關係,介面中定義的是該繼承體系的擴充套件功能