為熱愛編程的你點贊!
學習SpringBoot實戰課程 https://edu.csdn.net/course/detail/31433
學習SpringCloud入門課程 https://edu.csdn.net/course/detail/31451
面向物件系列:
類和物件
封裝
繼承
多型
static關鍵字和單例模式
介面和內部類
前言
Hello,大家好,介面是Java中的一個重要的型別,實際專案開發中會大量使用到介面,稱為:面向介面編程,本章將重點介面以及內部類,
介面
介面是什么

生活中的介面
如電腦上的USB介面,規范了介面的形狀、尺寸等,只要符合該規范的設備就可以連接上去,
程式中的介面
是一套規范,規定了方法的定義,只要是實作了該介面的類必須按照介面的規范來定義,
使用介面
定義介面的語法:
public interface 介面名{
靜態常量的定義;
方法的定義;
}
定義介面要注意:
- 方法是abstract的,不能實作
- 定義的屬性會自動轉變為靜態常量
- 方法只能是public的,默認是public
實作介面
public class 類名 implements 介面名{
具體方法的實作
}
實作介面要注意:
- 必須實作所有介面中的方法
- 方法必須和介面中定義的完全一致
- 方法必須是public的
- 一個類可以實作多個介面
- 一個類可以繼承類同時實作介面
class 類名 extends 父類 implements 介面{
}
- 介面可以繼承介面,實作類必須實作所有的方法
interface A{
void testA();
}
//介面之間的繼承
interface B extends A{
void testB();
}
class C implements B{
public void testA() {
}
public void testB() {
}
}
介面在開發中的意義
- 為類的實作制定一套規范
- 把設計和實作分開
default關鍵字
Java1.8的新特性,被default定義的方法可以有默認的實作,
public interface Person {
//給介面方法默認的實作
default void eat(){
System.out.println("在吃飯!!");
}
void walk();
}
實作類不強制要求實作帶default的方法,
介面與抽象類的異同
介面和抽象類的區別是常見的面試題
相同點:
- 都可能存在沒有實作的方法
- 都不能實體化
不同點:
- 抽象類是單一繼承,類可以實作多個介面
- 介面不能定義構造方法
- 介面中的方法只能是public,抽象類可以有各種訪問型別的方法,
- 介面中只能定義靜態常量,抽象類可以定義普通的成員變數,
- 介面中的抽象方法不用加abstract,抽象類必須加,
內部類
內部類就是在類里面定義的類,
Java的內部類包含:
- 成員內部類
- 靜態內部類
- 區域內部類
- 匿名內部類
成員內部類
和成員變數(屬性)、成員方法同級的,都是屬于某一個物件所有的,
語法:
class 外部類{
class 內部類{
...
}
}
特點:
- 一般只在外部類的里面使用
- 成員內部類和類的屬性和方法同一級別,
- 屬于類的物件,在創建每個物件時加載到記憶體
靜態內部類
成員內部類加上static,就是靜態內部類
語法:
public class 外部類{
static class 內部類{
}
}
和成員內部類的區別:
- 成員內部類屬于物件,靜態內部類屬于外部類
- 成員內部類每創建一個物件加載一次,靜態內部類和外部類一起加載
- 成員內部類能訪問外部類的所有成員,靜態內部類只能訪問外部類靜態的成員
區域內部類
在方法中定義的類,只能在當前方法中使用,方法呼叫時加載類到記憶體中,
語法:
class 外部類{
public void test(){
class 內部類{
}
內部類 物件 = new 內部類();
}
}
匿名內部類
一個沒有名字的內部類,創建類的同時創建了物件,
應用場合:介面或抽象類的實作類只需要使用一次,代碼是一次性的,
語法:
new 介面/抽象類()
{
實作方法
};
實作USB案例
//Usb介面
interface Usb{
void connect(); //連接
void charge(); //充電
}
//匿名內部類實作介面
Usb usb = new Usb(){
public void connect(){
System.out.println("Test2測驗連接");
}
public void charge(){
System.out.println("Test2測驗充電");
}
};
usb .connect();
usb .charge();
和一般類的區別:
- 沒有名字
- 只能使用一次
- 沒有構造方法
- 不能定義靜態成員
面試題:在?處填寫什么可以在控制臺輸出30,20,10,
class Outer {
public int num = 10;
class Inner {
public int num = 20;
public void show() {
int num = 30;
System.out.println(?); num
System.out.println(?); this.num
System.out.println(?); Outer.this.num
}
}
}
class InnerClassTest {
public static void main(String[] args) {
Outer.Inner oi = new Outer().new Inner();
oi.show();
}
}
結束
好了,本文大家都掌握了嗎?歡迎留言討論哦
留兩個作業:
- 定義播放器介面,播放音樂方法;定義游戲機介面,玩游戲方法;
定義電話類,有品牌和價格屬性,和打電話方法
定義手機類繼承電話并實作播放器和游戲機介面 - 定義算術介面,分別定義加減乘除四個方法,每個方法都有兩個double引數,回傳值為double,
使用常規類和匿名內部類兩種方式實作介面,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/248180.html
標籤:其他
下一篇:作業統計程式3.0
