1. 程式人生 > >第三十、Java面向物件之介面

第三十、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:子類會自動擁有父