目錄
1、引言:
2、介面的特點:
3、成員特點:
4、案例:
5、介面和類相似點:
6、介面和類的區別:
7、介面的特性:
8、抽象類和介面的區別
9、打夯基礎:

1、引言:
大家吼啊,今天給大家介紹一下新朋友——介面,
介面就是一種公共的規范標準,只要符合規范標準,都可以使用,Java中的介面更多的體現在對行為的抽象,一個類通過繼承介面的方式,從而來繼承介面的抽象方法,
介面并不是類,撰寫介面的方式和類很相似,但是它們屬于不同的概念,類描述物件的屬性和方法,介面則包含類要實作的方法,除非實作介面的類是抽象類,否則該類要定義介面中的所有方法,
介面無法被實體化,但是可以被實作,一個實作介面的類,必須實作介面內所描述的所有方法,否則就必須宣告為抽象類,另外,在 Java 中,介面型別可用來宣告一個變數,他們可以成為一個空指標,或是被系結在一個以此介面實作的物件,
2、介面的特點:
介面用關鍵字interface修飾:
public interface 介面名{}
類實作介面用implements表示:
public class 類名 implements 介面名 {}
介面不能實體化:
介面如何實體化呢?參照多型的方式,通過實作類物件實體化,這叫介面多型,多型的形式:具體類多型,抽象類多型,介面多型,
介面的子類:
要么重寫介面中的所有抽象方法,要么子類也是抽象類,
3、成員特點:
成員變數:
只能是常量,默認修飾符為:public static final
構造方法:
沒有,因為介面主要是擴展功能的,而沒有具體存在,
成員方法:
介面中只能是抽象方法,默認修飾符為:public abstract ,JDK8以后可以有靜態方法,JDK9以后可以有默認方法,在后面的學習中我們將會學到他們,
4、案例:
對貓和狗進行訓練,他們就可以跳高了,這里加入跳高功能,請采用抽象類和介面來實作貓案例,并在測驗類中進行測驗,

動物類
public abstract class Animal {
private String name;
private int age;
public Animal() {
}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public abstract void eat();
}
跳高介面
public interface Jumpping {
public abstract void jump();
}
貓類
public class Cat extends Animal implements Jumpping {
public Cat() {
}
public Cat(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("貓吃魚");
}
@Override
public void jump() {
System.out.println("貓可以跳高了");
}
}
測驗類
public class AnimalDemo {
public static void main(String[] args) {
//創建物件,呼叫方法
Jumpping j = new Cat();
j.jump();
System.out.println("--------");
Animal a = new Cat();
a.setName("加菲");
a.setAge(5);
System.out.println(a.getName()+","+a.getAge());
a.eat();
a = new Cat("加菲",5);
System.out.println(a.getName()+","+a.getAge());
a.eat();
System.out.println("--------");
Cat c = new Cat();
c.setName("加菲");
c.setAge(5);
System.out.println(c.getName()+","+c.getAge());
c.eat();
c.jump();
}
}
5、介面和類相似點:
- 一個介面可以有多個方法,
- 介面檔案保存在 .java 結尾的檔案中,檔案名使用介面名,
- 介面的位元組碼檔案保存在 .class 結尾的檔案中,
- 介面相應的位元組碼檔案必須在與包名稱相匹配的目錄結構中,
6、介面和類的區別:
- 介面不能用于實體化物件,
- 介面沒有構造方法,
- 介面中所有的方法必須是抽象方法,Java 8 之后 介面中可以使用 default 關鍵字修飾的非抽象方法,
- 介面不能包含成員變數,除了 static 和 final 變數,
- 介面不是被類繼承了,而是要被類實作,
- 介面支持多繼承,
7、介面的特性:
- 介面中每一個方法也是隱式抽象的,介面中的方法會被隱式的指定為 public abstract(只能是 public abstract,其他修飾符都會報錯),
- 介面中可以含有變數,但是介面中的變數會被隱式的指定為 public static final 變數(并且只能是 public,用 private 修飾會報編譯錯誤),
- 介面中的方法是不能在介面中實作的,只能由實作介面的類來實作介面中的方法,
8、抽象類和介面的區別
- 1. 抽象類中的方法可以有方法體,就是能實作方法的具體功能,但是介面中的方法不行,
- 2. 抽象類中的成員變數可以是各種型別的,而介面中的成員變數只能是 public static final 型別的,
- 3. 介面中不能含有靜態代碼塊以及靜態方法(用 static 修飾的方法),而抽象類是可以有靜態代碼塊和靜態方法,
- 4. 一個類只能繼承一個抽象類,而一個類卻可以實作多個介面,
9、打夯基礎:
1. 有一個顯示幕介面Graphoscope,具有display方法,有兩個類:臺式顯示幕和液晶顯示幕都實作顯示幕介面,有一個顯示幕生產廠家能夠生產這兩種顯示幕;有Computer類,具有Graphoscope屬性,生產兩臺電腦,分別配置臺式顯示幕和液晶顯示幕,
//介面
public interface Graphoscope {
void display();
}
//實作類
public class LCD implements Graphoscope{
@Override
public void display() {
System.out.println("液晶顯示幕");
}
}
//實作類
public class ConsoleDisplay implements Graphoscope {
@Override
public void display() {
System.out.println("臺式顯示幕");
}
}
public class Computer {
private Graphoscope gs;
public Computer() {
}
public Computer(Graphoscope gs) {
this.gs = gs;
}
public Graphoscope getGs() {
return gs;
}
public void setGs(Graphoscope gs) {
this.gs = gs;
}
}
//測驗類
public class Test {
public static void main(String[] args) {
Computer c = new Computer(new ConsoleDisplay());
Computer d = new Computer(new LCD());
c.getGs().display();
d.getGs().display();
}
}
2. 有一個交通工具介面Vehicles,有work方法,有Horse類和Boat類分別實作Vehicles,創建交通工具工廠類,有兩個方法分別獲得交通工具Horse和Boat;有Person類,有name和Vehicles屬性,在構造器中賦值,實體化“唐僧”,一般情況下用Horse作為交通工具,遇到大河時用Boat作為交通工具,
public interface Vehicles {
void work();
}
public class Horse implements Vehicles{
@Override
public void work() {
System.out.println("唐僧騎馬蹬了個蹬");
}
}
public class Boat implements Vehicles{
@Override
public void work() {
System.out.println("唐僧坐船漂了個漂");
}
}
public class VehicleFactory {
public Horse horseProduct() {
return new Horse();
}
public Boat BoatProduct() {
return new Boat();
}
}
public class People {
private String name;
private Vehicles v;
public People() {
}
public People(String name, Vehicles v) {
this.name = name;
this.v = v;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Vehicles getV() {
return v;
}
public void setV(Vehicles v) {
this.v = v;
}
}
public class Test {
public static void main(String[] args) {
VehicleFactory v = new VehicleFactory();
System.out.println("唐僧遇見了通天河河");
People t = new People("唐僧", v.BoatProduct());
t.getV().work();
System.out.println("唐僧過了河");
t = new People("唐僧", v.horseProduct());
t.getV().work();
}
}
求關注!求評論!求點贊!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/304516.html
標籤:java
上一篇:圖文并茂-----看懂堆排序
