第三十、Java面向物件之介面
一個類最多隻能有一個直接的父類。但是有多個間接的父類。
java是單繼承。
class Ye{
String name;
}
class Fu extends Ye{
}
//
class Zi extends Fu{
}
class MyClass
{
public static void main(String[] args)
{
// System.out.println("Hello World!");
Zi zi =new Zi();
zi.name = "葫蘆娃";
}
}
介面:
介面(interface):usb介面,主要是使用來拓展筆記本的功能,那麼在java中的介面主要是使用來拓展定義類的功能,可以彌補java中單繼承的缺點。
介面的定義格式:
interface 介面名{屬性;
抽象方法;
}
介面要注意的事項 :
1. 介面是一個特殊的類。2. 介面的成員變數預設的修飾符為: public static final 。那麼也就是說介面中的成員變數都是常量。
3. 介面中 的方法都是抽象的方法,預設的修飾符為: public abstract。
4. 介面不能建立物件。
5. 介面是沒有構造方法的。
6. 介面是給類去實現使用的,非抽象類實現一個介面的時候,必須要把介面中所有方法全部實現。
實現介面的格式:
class 類名 implements 介面名{
}
interface A{ //成員變數 public static final int i=10; //成員函式 public void print(); } class MyClass implements A{ // MyClass就實現了A介面 public static void main(String[] args) { MyClass d = new MyClass(); d.print(); } //實現介面中的方法 public void print(){ System.out.println("這個是介面中的print方法..."); } }
介面的作用:
1. 程式的解耦。(低耦合)
2. 定義約束規範。
3. 拓展功能。
//普通的鉛筆類 class Pencil{ String name; public Pencil(String name){ this.name = name; } public void write(){ System.out.println(name+"沙沙的寫..."); } } //橡皮介面 interface Eraser{ public void remove(); } //帶橡皮的鉛筆 class PencilWithEraser extends Pencil implements Eraser { public PencilWithEraser(String name){ super(name); } public void remove(){ System.out.println("塗改,塗改...."); } } class MyClass { public static void main(String[] args) { PencilWithEraser p = new PencilWithEraser("2B鉛筆"); p.write(); p.remove(); } }
注意:可以通過javap命令檢視.
1、介面中的所有屬性預設的修飾符是 public static final。
2、介面中的所有方法預設的修飾符是 public abstract。
疑惑:幹嘛不在pencilWithEraser新增remove功能函式,而要通過介面?
需求:在現實生活中有部分同學在學校期間只會學習,但是有部分學生除了學習外還會賺錢。
interface (定義介面)
implements (實現介面)
分析:
普通的學生類
介面
會掙錢的學生
//普通的學生類
class Student{
String name;
public Student(String name){
this.name = name;
}
public void study(){
System.out.println(name+"好好學習");
}
}
//掙錢是學生拓展的功能---定義在介面上
interface Money{
public void makeMoney();
}
//會掙錢的學生
class MoneyStudent extends Student implements Money{
public MoneyStudent(String name){
super(name);
}
public void makeMoney(){
System.out.println(name+"好好掙錢,然後...!");
}
}
class MyClass
{
public static void main(String[] args)
{
Student s = new Student("李金華");
s.study();
//s.makeMoney();
MoneyStudent m = new MoneyStudent("孫雙雙");
m.study();
m.makeMoney();
}
}
介面的特點
1. 類實現介面可以通過implements實現,實現介面的時候必須把介面中的所有方法實現,一個類可以實現多個介面。
2. 介面中定義的所有的屬性預設是public static final的,即靜態常量既然是常量,那麼定義的時候必須賦值。
3. 介面中定義的方法不能有方法體。介面中定義的方法預設新增public abstract
4. 有抽象函式的不一定是抽象類,也可以是介面類。
5. 由於介面中的方法預設都是抽象的,所以不能被例項化。
6. 對於介面而言,可以使用子類來實現介面中未被實現的功能函式。
7. 如果實現類中要訪問介面中的成員,不能使用super關鍵字。因為兩者之間沒有顯示的繼承關係,況且介面中的成員成員屬性是靜態的。可以使用介面名直接訪問。
8. 介面沒有構造方法。
interface Eraser {
public static final String color = "白色";
public abstract void clean();
}
class Pencil implements Eraser {
String name;
Pencil() {
}
Pencil(String name) {
this.name = name;
}
void write() {
System.out.println("寫字");
}
@Override
public void clean() {
System.out.println("塗改...");
}
}
分析:
原本鉛筆沒有塗改功能的,但是一旦實現了Eraser介面做了實現,那麼就具備了塗改功能,那麼介面的作用則是拓展功能。
介面與類、介面之間的關係
1. 大家之前都知道類與類之間的關係繼承,那麼介面與類之間又是怎樣子的關係呢?
介面與類之間是實現關係。
2. 非抽象類實現介面時,必須把接口裡面的所有方法實現。
3. 抽象類實現一個介面時,可以實現也可以不實現介面中的方法。
3. 類實現介面用關鍵字implements,類與介面之間是可以多實現的(即一個類可以實現多個介面)。
疑問: java為什麼不支援多繼承,而支援了多實現呢?
class A{
public void print(){
System.out.println("AAAAAA");
}
}
class B{
public void print(){
System.out.println("BBBBBB");
}
}
class C extends A ,B{
}
new C().print(); //這個print方法到底是父類A還是B的方法呢???
介面與介面之間關係:繼承關係。
介面與介面之間要注意事項:
1. 一個介面是可以繼承多個介面的。
interface A{
public void print();
}
interface C{
public void getArea();
}
interface B extends A,C{ // B介面繼承A、C介面
public void test();
}
相關推薦
第三十、Java面向物件之介面
一個類最多隻能有一個直接的父類。但是有多個間接的父類。 java是單繼承。 class Ye{ String name; } class Fu extends Ye{ } // class Zi extends Fu{ } class MyClass {
第二十六、Java面向物件之instanceof 關鍵字
instanceof是什麼? 1:屬於比較運算子: 2:instanceof關鍵字:該關鍵字用來判斷一個物件是否是指定類的物件。 3:使用格式: 物件 instanceof 類;
Java學習系列(二十一)Java面向物件之註解詳解
一、前言 Java中的註解Annotation運用到很多方面,比如之前講的單元測試中的@Test、Spring、SpringMVC還有其他框架等等。Java本身自帶的註解也有一些,比如:@Override(子類要重寫/覆寫父類的對應方法)、@Deprecated(表
Java學習系列(二十二)Java面向物件之列舉詳解
一、前言 今天我們來講講列舉,希望通過這篇部落格大家能對列舉有個更全面的瞭解。列舉是一種例項(大寫)數固定的類(不能再建立例項),列舉改變了常量的宣告方式,而且它在編譯期間就限定了型別。列舉多用於確定的狀態數(如:滑鼠上下左右、IM訊息已讀未讀)、型別數(如:系統
第三十一、Java面向物件三大特徵之多型
面向物件的三大特徵: 1. 封裝2. 繼承。3. 多型 多型: 一個物件具備多種形態。(父類的引用型別變數指向了子類的物件、或者是介面的引用型別變數指向了介面實現類的物件) 多型的前提: 必須存在繼承或者實現 關係。 動物 a = new
第二十四、Java面向物件三大特性之繼承與super關鍵字
面向物件的三大特徵:1. 封裝2. 繼承3. 多型. 1、類和類之間的常見關係 1:既然繼承是描述類和類之間的關係,就需要先來了解類和類之間的常見關係 1.1 現實生活的整體與部分 舉例說明 1:現實生活 1:學生 是人 2:狗
十一、java面向物件程式設計(類、物件)
那麼,人類思維的抽象性,即這些抽象概念,如何轉換應用到計算機的軟體開發中呢?或者說軟體設計、程式設計中如何體現出符合人類思維習慣的程式設計模式呢?人類思維的抽象性與面向物件的程式設計方法如何對接呢?這裡接著上面對“車”的分析,前面的“車”為一個抽象出的概念,“車”具有相關的屬性和方法,通過“車”這個名稱、屬性
第三集:Solidity面向物件
面向物件:OO程式設計,針對面向過程而言的。 特點:封裝、繼承、多型 繼承: 在solidity中,繼承就是合約與合約之間一種特殊的傳遞關係。 通過”is”關鍵字實現繼承。子合約(派生合約)可以訪問父合約中所有非private的狀態變數與函式。 繼承
JAVA---面向物件之從生活中抽取例項物件
public class Car{ private String brand; private int num; private String colour; private int seats; //建構函式 public Car(String brand){
Java面向物件之多型(向上轉型與向下轉型)
多型,大概每個人都知道。但是,又有幾個人真的理解什麼是多型、多型有哪些細節呢?如果你看到這篇文章的名字,腦海中對多型沒有一個清晰的概念,不妨點進來看看,也許會有收穫。 什麼是多型 簡單的理解多型 多型,簡而言之就是同一個行為具有多個不同表現形式或形態的能力。比如說,有一杯水,我不知道
C++筆記 第三十五課 函式物件分析---狄泰學院
如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。 學習C++編譯環境:Linux 第三十五課 函式物件分析 1.客戶需求 編寫一個函式 函式可以獲得斐波那契數列每項的值 每呼叫一次返回一個值 函式可根據需要重複使用 for(int i =0; i<
【第10天】Java面向物件的高階特徵(修飾符的介紹)
1 訪問許可權 2 static 2.1 靜態成員 2.2 程式碼塊 2.3 載入順序 3 final 4 abstract 1 訪問許可權 修飾符:(√:可訪問
Java 面向物件之構造方法
01構造方法引入 A:構造方法的引入 在開發中經常需要在建立物件的同時明確物件的屬性值,比如員工入職公司就要明確他的姓名、年齡等屬性資訊。 那麼,建立物件就要明確屬性值,那怎麼解決呢?也就是在建立物件的時候就要做的事情,當使用new關鍵字建立物件時,怎麼給物件的屬性初始化值呢? 這
十、對面向物件新的理解
看了一個視訊,顛覆了之前對面向物件設計的理解,程式設計真的的很神奇,他的部落格: 之前以為面向物件就是class A(){},現在知道了只用函式也可以面向物件程式設計。 面向過程、面向物件、函數語言程式設計只是不同的程式設計正規化吧,本身沒有好壞之分,看用的人了。
Java面向物件之構造方法
package com.zhangxueliang.demo; /* * 構造方法: * 給物件的資料進行初始化 * * 格式: * 方法名和類名相同 *
Java面向物件之多型(精簡版)
2.1實現條件 在剛剛開始就提到了繼承在為多型的實現做了準備。子類Child繼承父類Father,我們可以編寫一個指向子類的父類型別引用,該引用既可以處理父類Father物件,也可以處理子類Child物件,當相同的訊息傳送給子類或者父類物件時,該物件就會根據
JAVA面向物件之繼承
繼承: 講學生和工人的共性描述提取出來,單獨進行描述。只要讓學生和工人與單獨描述的這個類有關係,就可以了。 1、提高了程式碼的複用性。 2、讓類與類之間產生了關係。有了這個關係,才有了多型的特性。 3、注意:千萬不要為了獲取其他類的功能,簡化程式碼而繼承。必須是類與類
Python學習【第15篇】:面向物件之異常處理 python------------------異常處理
python------------------異常處理 一、錯誤與異常 程式中難免會出現錯誤,而錯誤分為兩種 1.語法錯誤:(這種錯誤,根本過不了pyt
java面向物件之方法篇
面向物件-方法 課堂內容: 1.方法的概念 2.方法的定義 3.方法的分類 4.方法的過載 一、方法概念 方法的概念: 方法是體現了面向物件中的封裝,將多個程式碼片段封裝成一個方法,為了這些程式碼的重用。 二、方法的定義: [作用域/可見度
Java 面向物件之繼承和重寫OverWrite,重寫和過載的區別,抽象類
01繼承的概述 A:繼承的概念 a:繼承描述的是事物之間的所屬關係,通過繼承可以使多種事物之間形成一種關係體系 b:在Java中,類的繼承是指在一個現有類的基礎上去構建一個新的類,構建出來的新類被稱作子類,現有類被稱作父類 B:繼承關係的子類特點 a:子類會自動擁有父