面向對象編程

1.初識面向對象

面向過程&面向對象

  • 面向過程思想java

    • 步驟清晰簡單,第一步,第二步作什麼。。
    • 適合處理較爲簡單的問題
    • 性能高
    • 線性思惟
  • 面向對象思想編程

    • 分類的思惟模式,思考問題解決須要哪些分類,而後對這些分類進行單獨思考
    • 宏觀上把握,總體上合理分析,微觀細節,仍須要面向過程的思路處理
    • 易維護,易複用,易拓展

什麼是面向對象

  • 面向對象編程(Object-Oriented Programming,OOP)安全

  • 面向對象編程的本質是:以類的方式組織代碼,以對象的形式封裝數據dom

  • 抽象ide

  • 三大特性:工具

    • 封裝
    • 繼承
    • 多態
  • 對象:具體的事物。類是抽象的,是對對象的抽象性能

  • 類是對象的模板this

類與對象的關係

  • 類是一種抽象的數據類型,是對某一類事物的總體描述
  • 對象是抽象概念的具體實例

  • 類中包含設計

    靜態的屬性:屬性code

    動態的行爲:方法

2. 方法回顧加深

  • 方法的定義

    • 修飾符 :public /private/protected/default
    • 返回值類型
    • break :跳出switch,j結束循環,和return 相區別
    • 方法名 :見名知意,符合規則
    • 參數列表 :參數類型,參數名 ... 可變形參
    • 異常拋出
  • 方法的調用

    • 靜態方法 :經過類名直接調用,隨類一塊兒加載 只能調用靜態方法。
    • 非靜態方法 :類實例化對象調用 類實例化後才加載,靜態非靜態方法均可調用
    • 形參和實參:參數類型要 一 一對應
    • 值傳遞和引用傳遞:
      • 值傳遞:基本數據類型參數,傳遞的是實際存在的數值
      • 引用傳遞:對象,傳的地址
    • this關鍵字

3.對象的建立分析

建立與初始化對象

  • 使用new關鍵字建立對象,分配內存空間並給建立好的對象進行默認的初始化以及對類中構造器的調用。

  • 類中的構造器(構造方法),是進行建立對象時必須調用的,構造器有如下倆特色

    1. 必須和類的名字相同

    2. 沒有返回值類型,也不能寫void

    3. 格式:權限修飾符+類名() { }

    4. 一個類中至少有一個構造器

      class Person{
      	//構造器
          public Person(){
           
          }
      }
    • 有參構造器
      1. 可與其餘形參列表不一樣的構造器構成重載
      2. 一旦定義了顯示的構造器,系統就再也不提供默認的空參構造器

對象的使用

  • 對象的屬性和方法

    Person people=new Person();
    people.say();//調用方法
    people.name; //調用屬性

4.面向對象三大特性

封裝

  • 該隱藏的隱藏,該暴露的暴露

  • 程序的設計要「高內聚,低耦合」(高內聚:類內部的數據操做細節本身完成,不容許外部干涉;低耦合:僅暴露少許的方法供外部使用)

  • 封裝(數據的隱藏)

    • 屬性私有,get()/set() 方法對其操做

      class Person{
      	private int age;
          private String name;
          public int getAge(){
              return this.age;
          }
          public void setAge(int age){
              this.age=age;
          }
      }
  • 優勢

    1. 提升程序的安全性,保護數據
    2. 隱藏代碼的實現細節
    3. 統一接口
    4. 系統可維護性加強

繼承

  • 繼承的本質是對某一批類的抽象;

  • extends "擴展",子類是父類的擴展 使用此關鍵字來實現繼承

  • java中只有單繼承,沒有多繼承

  • 繼承是類和類之間 的關係

  • 子類與父類的關係,從意義上來說具備「 is a" 的關係。

  • object類: Java中全部的類,都默認直接或間接繼承object

  • super :

    • 調用父類的屬性和方法 super;調用父類的構造方法
    • 隱式的調用了父類的無參構造器,只能出如今子類方法或構造方法中
    • super和this不能同時調用構造方法
  • VS this

    • 表明的對象不一樣

      • this 自己調用者這個對象
      • super 父類對象的引用
    • 前提

      • this :沒有繼承也可使用
      • super 只能在繼承中使用
    • 構造方法:

      • this() :本類的構造器
      • super() :父類構造器
  • final

    • final修飾變量:此變量爲一個常量
    • final修飾的類不可被繼承(斷子絕孫)
    • final修飾的方法 :不能被重寫
    • final修飾局部變量,一旦賦值,只能使用,不可改變。

    方法重寫

    • 前提條件:有繼承關係,子類重寫父類的方法

    • 規則(子類的方法和父類方法必須一致,方法體不一樣)

      1. 方法名必須相同
      2. 參數列表必須相同
      3. 修飾符:範圍能夠擴大但不能縮小
      4. 拋出的異常範圍,能夠被縮小但不能擴大
    • 非靜態方法的重寫

    • 私有方法 static 修飾的方法 ,final 修飾的方法 不能被重寫

    • 私有的屬性和方法不能被繼承

    • 爲何要重寫:

      ​ 1. 父類的功能,子類不必定須要,或不必定知足;

      ​ 2. @override

多態

  • 一種事物的多種形態

  • 繼承是多態的前提,類型轉換異常

  • 何爲多態性

    父類的引用指向子類的對象(子類的對象賦給父類的引用)

  • 子類重寫父類的方法,執行子類的方法

  • 編譯看左,運行看右

  • 方法的多態,屬性沒有多態

instanceof

  • a instanceof A :判斷對象a是不是類A的實例
  • 使用:避免向下轉型時出現class Cast Exception 的異常,在轉型以前進行 instanceof 的判斷
    • 向下轉型: 父類轉爲子類(強制轉換)
    • 向上轉型:子類轉爲父類
      • 方便方法的調用,減小重複的代碼

5. static(隨類加載)

  • static 修飾變量

    • 靜態變量 :在類內存中只有一個,能被類中全部實例所共享
    • 非靜態變量 :成員變量和全局變量
  • static 修飾方法:

    • 靜態方法:只能調用靜態方法和靜態變量(生命週期不相同)工具類方法
    • 非靜態方法:可調用靜態和非靜態的方法
  • 可經過類名 .方法 類名 .屬性 調用

  • 修飾代碼塊:初始化變量 ,只執行一次

  • 靜態導入包

    import static java.lang.Math.random;
    
    class Person{
        public static void main(String[] args){
            System.out.print(random());
        }
    }

6.抽象類和接口

抽象類

  • abstract 修飾

    修飾方法:抽象方法

    修飾類:抽象類

  • 抽象類中能夠沒有抽象方法,但有抽象方法的類必定是抽象類

  • 抽象類不能建立實例對象,用來讓子類繼承

  • 抽象方法:只有方法的聲明,沒有方法體,子類來重寫實現

  • 子類繼承抽象類,則該子類必須重寫抽象類中的抽象方法,否則,該子類也要聲明爲抽象類

  • 存在構造器

接口

  • 只有規範:一組規則,實現類來遵照
  • 聲明使用interface 關鍵字
  • 能夠實現多繼承,易擴展
  • 實現類實現接口使用關鍵字 implements
  • 接口中的方法都是抽象的,不一樣的實現類須要對接口中的全部方法重寫
  • 接口中定義的屬性都是常量 public static final
  • 接口不能被實例化,接口中沒有構造方法

7.內部類及opp實戰

內部類

  • 定義:就是在類內部定義一個類

    public class Outer{
        public void out(){
            System.out.print("外部類方法");
        }
        class Inner{
            public void in(){
                System.out.print("內部類方法");
            }
        }
    }
  • 分類

    1. 成員內部類
    2. 靜態內部類
    3. 局部內部類
    4. 匿名內部類
相關文章
相關標籤/搜索