中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java的面向對象是什么

發布時間:2020-07-15 10:45:27 來源:億速云 閱讀:132 作者:Leah 欄目:編程語言

本篇文章給大家分享的是有關java的面向對象是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

11、接口(interface)

引入:抽象類是從多個類中抽象出來的模板,若要將這種抽象進行得更徹底,就得用到一種特殊的“抽象類”→ 接口;

例子:

生活中聽說過的USB接口其實并不是我們所看到的那些插槽,而是那些插槽所遵循的一種規范;而我們看到的那些插槽是根據USB規范設計出來的實例而已,也就說插槽是USB的實例;

對應不同型號的USB設備而言,他們各自的USB插槽都需要遵循一個規范,遵守這個規范就可以保證插入插槽的設備能與主板正常通信;

對于同一種型號的主板上的多個USB插槽,他們有相同的數據交換方式,相同的實現細節,可認為他們都是同一個類的不同實例

我的總結:

接口只定義了類應當遵循的規范,卻不關心這些類的內部數據和其方法內的實現細節.

接口只規定了這些類里必須提供的方法;從而分離了規范和實現.增強了系統的可拓展性和維護性;

使用接口的好處,拓展性,維護性更好,所以我們在開發中會經常用到接口.(相當于定義了一種標準)

interface定義

接口定義一種規范,規定一個類必須做什么,但它不管如何具體去做;

[修飾符] interface 接口名 extends 父接口1,父接口2....

沒有構造方法,不能實例化;

接口只能繼承接口,不能繼承類

接口里沒有普通方法,方法全是抽象的;

接口里的方法默認修飾符是public abstract;

接口里的字段全是全局常量,默認修飾符是public static final;

接口里的成員包括(主要是前兩個):

全局常量

公共的抽象方法

內部類(包括內部類,內部接口,內部枚舉類);

我的總結:

接口沒有構造方法,不能實例化!

接口里的方法全部是抽象的,沒有普通方法,有默認的修飾符 public abstract,必須全部覆寫!

12、接口的使用

格式:public class SubImpl  extends Super  implements IA,IB

接口可以多繼承,但是只能繼承接口,不能繼承類。

實現接口(支持多實現)

[修飾符] class 類名 implements 接口1,接口2...

接口的實現必須在 extends 之后;

實現接口的方法必須是 public 類型

接口與類之間的關系:

實現關系或者說是繼承關系.

可以說類實現了接口的方法,也可以說類繼承了接口的方法,不同情況下不同的理解!

13、面向接口編程之制定標準和簡單工廠模式

制定一個標準,讓別人去實現或者說滿足它!

Eg:
interface USB{//定義USB標準
    void useUSB();//USB有使用USB的行為
}

簡單工廠模式

構建一個工廠出來,在里面進行生產,用的時候直接拿

我的總結:

好處:屏蔽不同子類實現的差異,提高代碼的可拓展性和可維護性;

package reviewDemo;
 
//簡單工廠模式
 
 
 
interface Phone{//制定標準,都要實現send()方法
 
   public void send();
 
}
 
 
 
class Iphone implements Phone{
 
   @Override
 
   public void send() {
 
      System.out.println("Iphone手機在發短信");
 
   }
 
}
 
 
 
class AndroidPhone implements Phone{
 
   @Override
 
   public void send() {
 
      System.out.println("AndroidPhone手機在發短信");
 
   }
 
}
 
 
 
class MyPhone implements Phone{
 
   @Override
 
   public void send() {
 
      System.out.println("MyPhone手機在發短信");
 
   }
 
}
 
 
 
class Factory{
 
   public static void show(String type){//傳入參數,根據不同的類型個性化定制
 
      if(type.equals("")){//為空的情況,不用往下執行
 
         System.out.println("對不起,類型為空!,請重新輸入!");
 
         return;
 
      }
 
      Phone p = null;
 
      if("Iphone".equals(type)){//判斷類型
 
         p = new Iphone();
 
      }else if("AndroidPhone".equals(type)){
 
         p = new AndroidPhone();
 
      }else{
 
         p = new MyPhone();
 
      }
 
      p.send();
 
   }
 
}
 
 
 
public class FactoryDemo17 {
 
   public static void main(String[] args) {
 
     
 
      new Factory().show("Iphone");//調用方法
 
      new Factory().show("AndroidPhone");
 
      new Factory().show("MyPhone");
 
      new Factory().show("YourPhone");
 
      new Factory().show("");
 
   }
 
}

輸出:

Iphone手機在發短信

AndroidPhone手機在發短信

MyPhone手機在發短信

MyPhone手機在發短信

對不起,類型為空!

14、面向接口編程之適配器模式

使用一個現成的類,但是它的接口不完全符合你的需求,我只想要它其中的一個方法,不想覆寫其他的方法。

比如,窗體有變大,變小,關閉的行為,但是我現在只需要關閉行為;

package reviewDemo;
 
//適配器模式:只想用其中的某一個方法,用適配器作為中間的過渡
 
 
 
interface Windows{
 
   void max();
 
   void min();
 
   void close();
 
}
 
 
 
//適配器模式,實現接口所有的方法,但是不寫方法體!
 
class AdapterWindows implements Windows{
 
 
 
   @Override
 
   public void max() {
 
   }
 
 
 
   @Override
 
   public void min() {
 
   }
 
 
 
   @Override
 
   public void close() {
 
   }
 
  
 
}
 
 
 
class MyWindows extends AdapterWindows{
 
   //覆寫父類的方法
 
   public void close(){
 
      System.out.println("這個實現的是關閉功能!");
 
   }
 
}
 
 
 
public class Demo17 {
 
   public static void main(String[] args) {
 
      new MyWindows().close();
 
   }
 
}

接口和抽象類的比較

相同點:

都位于繼承的頂端,用于被其他實現或繼承;

都不能實例化;

都包含抽象方法,其子類都必須覆寫這些抽象方法;

區別:

抽象類為部分方法提供實現,避免子類重復實現這些方法,提供代碼重用性;接口只能包含抽象方法;

一個類只能繼承一個直接父類(可能是抽象類),卻可以實現多個接口;(接口彌補了Java的單繼承)

二者的選用:

優先選用接口,盡量少用抽象類;

需要定義子類的行為,又要為子類提供共性功能時才選用抽象類;

總結:接口不能有構造函數,抽象類是可以有構造函數的,

abstract可以定義構造函數(包括帶函數的構造函數),因為要保證其子類在創建的時候能夠進行正確的初始化,但是Abstract類不能被實例化。

知識點:如果不可以或者沒有創建對象,那么我們必須加上static修飾,不能用對象調用,就只好用類去調用。

16、匿名內部類

適合只使用一次的類

不能是抽象類,因為系統在創建匿名內部類的時候,會立即創建匿名內部類的對象。

匿名內部類不能定義構造器,因為匿名內部類沒有類名。

格式:
new 父類構造器([實參列表]) 或 接口()
{
//匿名內部類的類體部分
}

17、枚舉類

使用enum聲明,默認直接繼承了java.lang.Enum類,而不是Object類;

枚舉類的對象是固定的,實例個數有限,不可以再new( ),枚舉對象后可以跟()。

枚舉元素必須位于枚舉類體中的最開始部分,枚舉元素后要有分號與其他成員分隔。

枚舉類的構造方法的權限修飾符默認是private;

一旦枚舉對象后面加上{},那么該對象實際是枚舉匿名內部類對象;

所有枚舉類都提供一個靜態的values()方法(返回該枚舉類所有對象組成的數組),便于遍歷所有枚舉對象;

所有枚舉類都提供一個靜態的valueOf(String name)方法, 返回枚舉類中對象名等于 name的對象。

Eg:public enum Color{
 
        RED(), GREEN(){}, BLUE{};
 
}
 
 
 
 
 
package reviewDemo;
 
//枚舉
 
 
 
enum Color{
 
   Green,Blue,Yellow;
 
  
 
   @Override
 
   public String toString() {
 
      String ret = super.toString();
 
      switch (this) {
 
      case Green:
 
         ret = "綠色";
 
         break;
 
        
 
      case Blue:
 
         ret = "藍色";
 
         break;
 
        
 
      case Yellow:
 
         ret = "黃色";
 
         break;
 
 
 
      default:
 
         break;
 
      }
 
     
 
      return ret;
 
   }
 
  
 
}
 
 
 
class Personp{
 
   Color c = Color.Blue;
 
   void show(){
 
      System.out.println(c);
 
   }
 
}
 
 
 
public class Demo18 {
 
   public static void main(String[] args) {
 
      Color []color = Color.values();
 
      for (Color c : color) {
 
         System.out.println(c);
 
      }
 
      new Personp().show();
 
   }
 
}

輸出:

綠色

藍色

黃色

藍色

枚舉類覆寫接口抽象方法的兩種方式:

在枚舉類中實現接口的抽象方法;

在枚舉匿名內部類中實現接口的抽象方法;

interface I{
 
    void show();
 
}
 
 
 
enum Color implements I{
 
    RED(){
 
   public void show(){
 
        }
 
    }, GREEN{
 
   public void show(){
 
        }
 
    }, BLUE{
 
   public void show(){
 
        }
 
    };
 
}
 
 
 
enum Color implements I{
 
    RED(), GREEN, BLUE;
 
    public void show() {
 
    }
 
}

總結:枚舉不可以new();即便是反射也不可以!

備注:一個類如果沒有構造方法,那么一定有相對應的某個方法可以獲取對象!

以上就是java的面向對象是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湖南省| 天镇县| 甘德县| 甘肃省| 漳州市| 阿巴嘎旗| 正蓝旗| 城市| 纳雍县| 梅州市| 克东县| 紫金县| 元朗区| 凉城县| 柘荣县| 武功县| 株洲市| 海伦市| 美姑县| 祁连县| 牙克石市| 隆子县| 皮山县| 邢台县| 满城县| 通州市| 瓦房店市| 胶州市| 泽州县| 乾安县| 房产| 昂仁县| 响水县| 玉门市| 南澳县| 嵊泗县| 扎鲁特旗| 莎车县| 孟州市| 北辰区| 崇义县|