面向對象

面嚮對象語言是基於面向過程的!
面向過程:代表:C語言

    從始至終,都是一個執行者
    給一個需求:舉例:獲取數組中的最大值
        1)定義數組
        2)定義獲取最大值的方法
        3)在main方法中來調用哪個方法
    從分析,到一步一地操作,都是一種執行者!

面試題:
面向對象思想的特點: 千萬不要說:萬物皆對象!

    1)更符合我們的生活的一種行爲思想習慣
    2)將複雜的事情,簡單化
    3)讓我們從執行者變成指揮者

面向對象設計原則:
就是不斷創建對象,使用對象,指揮對象做事情

面向對象的三個特徵:
封裝:
繼承
多態
類和對象的關係
類是描述現實世界的事物
學生---->學生事物 ---->學生類:Student
屬性:姓名,年齡,性別,學號
成員變量:在類中方法外
行爲:主要工作學習
成員方法:去掉static

    創建對象的方式:
            格式:
                    類名  對象名 = new 類名() ;
                    對象名.成員變量;
                    對象名.成員方法(); 

代碼塊:
在Java語言,用{}括起來的內容,簡稱爲代碼塊!
代碼塊的分類:
局部代碼塊
書寫的位置,是在方法中定義的{代碼...}
作用:限定變量的生命週期的
構造代碼塊
在類的成員位置,每次在執行構造方法之前,如果當前類中有構造代碼塊,優先執行構造代碼塊,在執行構造方法
作用:如果多個類的構造方法中有共有的內容,可以將抽取到構造代碼塊中
靜態代碼塊
在類的成員位置,在{} 外面被static,靜態代碼塊
優先於對象存在!
靜態代碼塊只執行一次,優先執行
類的成員:
1)成員變量
2)構造方法: 無參構造方法/有參構造方法
3)成員方法

    成員方法分類
        是否有返回值
                有返回值類型的方法
                沒有返回值類型的方法,void方法
             是否有參數進行劃分
                有參數的方法
                無參數的方法

如何使用文檔說明書?
進入jdk文檔之後
點擊顯示--->索引---->查詢哪個類 比如Scanner

    找到官方提供的類
    需要觀察什麼?
        1)該類中有沒有字段
        2)看當前類中有沒有構造方法(一旦有構造方法,那說明可以通過這些構造方法創建該類對象)
        3)有沒有成員方法

    Java高級部分: 都藉助於文檔說明書
            JDK API(Application Programming Interface)
            IO流
            網絡編程
            集合
            反射

    觀察他的Jdk的版本號,在看它一簡單介紹...

static的特點:
隨着類的加載而加載(static跟類有關係)
1)被static修身的變量/方法,它都是優先於對象存在
2)static可以被多個對象共享
舉例:
我們Java班共享一個班級號

            飲水機:被共享
            水杯的水(不能被共享)
    3)被static修身的變量/方法,可以類名直接調用

    static關鍵字 注意事項:
                    靜態只能訪問靜態

static關鍵字的注意:
1)在靜態方法中,是沒有this關鍵字
被靜態修飾的是隨着類的加載而加載,this隨着對象的創建而存在
靜態優先於對象存在!
被靜態修飾的內容一般稱爲:類成員
2)訪問的問題
在靜態方法中,
針對成員變量:只能訪問靜態的成員變量
針對成員方法:只能訪問靜態的成員方法
在非靜態方法中
成員變量:既可以訪問靜態成員變量,也可以訪問非靜態的成員變量
成員方法:既可以訪問靜態的成員方法,也可以訪問非靜態的成員方法
繼承:將一些類共性內容抽取出來,封裝到一個獨立的類中,並且讓這個獨立的類和這些類產生一種關係,叫做繼承!
將上述代碼改進:使用繼承
抽象類:
比如動物吃的功能,每個具體的動物吃的功能不一樣,在當前類中只是給出一個方法聲明(抽象的,不帶方法體)
在一個類中,給出一個抽象功能,就必須將這個類定義爲抽象類!
抽象類的格式
abstract class 父類名(Animal){
}
抽象方法的格式:
public abstract(必須寫) 方法名() ; //抽象方法

注意:
1)如果一個類中有抽象方法,那麼這個類一定抽象類
2)抽象類中一定有抽象方法嗎? 還可以非抽象的

抽象類的特點:
1)抽象類不能直接實例化(不能直接創建對象)
2)子類必須重寫父類的抽象功能
抽象類的子類:
1)抽象類的子類如果是抽象類呢? 沒有任何意義,因爲使用的就是通過具體類創建對象,具體類都抽象類,沒意義!

    2)子類是具體類的話,對象的創建工作,由子類完成--->父類名  對象名 = new 子類名() ; 抽象類多態

實際工作中:
1)接口多態(用的最多)
2)抽象類多態
3)具體類對象的創建
抽象類成員的特點:
成員變量:
可以是變量,也可以是一個常量(自定義常量)
構造方法:
所有的構造方法都是給對象進行初始話:1)默認初始化 2)顯示初始化
成員方法:
可以是抽象的方法,也可以非抽象的方法
多態:某個事物在不同時刻體現出來的不同狀態!
水: 事物
液態 氣態 固態

    貓狗案例:
        創建一個貓類的對象           右-->左
        Cat cat = new Cat() ; //貓是貓
        Animal a = new Cat() ;//也是另外一種方式:貓是動物

多態的前提條件:
1)必須有繼承關係
2)必須方法重寫
貓狗案例:每個動物具體的吃的功能是不一樣,必須有方法重寫,將父類的功能覆蓋掉!
3)必須有父類引用指向子類對象 :向上轉型
格式:
父類名 對象名 = new 子類名() ;

多態中的成員訪問特點
1)成員變量的訪問特點:
編譯看左,運行看左 (左:父類)
2)成員方法(一般沒有強調靜態方法都是非靜態的)的訪問特點:
編譯看左,運行看右
3)構造方法:作用:就是給對象進行初始化的
4)靜態的成員方法的訪問特點:
編譯看左,運行看左(靜態的成員方法算不上方法重寫,因爲靜態的都和類有直接關係!)
多態的好處:
1)提高代碼的擴展性(由多態保證)
2)提高代碼的維護性(由繼承關係)
多態的弊端:
不能訪問子類特有功能
多態的弊端:
最優秀的方式:使用向下轉型:將父類對象強制轉換爲子類的引用
格式:
子類名 子類對象名 = (子類名)父類的對象;

注意:
向下轉型使用不當的時候,會出現一個異常:ClassCastExceptino:類轉換異常
類的初始化
繼承過程中,分層初始化;首先父類初始化,然後是子類
創建一個類的對象的時候,是通過構造方法創建對象,構造方法的作用:給對象進行初始化話的
繼承中的成員方法訪問特點:
子類繼承父類,當成員方法名稱不一致的時候,分別調用
當成員方法名稱一致的情況,首先在子類中有麼有該方法,如果有,就調用;如果沒有,就調用父類的成員方法;
法重寫:override:繼承裏面的技術
當子類出現了和父類一模一樣的方法的時候,子類的方法會重寫(覆蓋,複寫)父類的方法,調用的子類的功能
方法重載:overload:方法裏面的
在方法中,多個方法名相同,並且他的參數列表不同,與返回值無關
參數列表不同:
1)參數個數不同
2)參數類型不同
接口:(開發過程中要遵循面向接口編程!)
將一些額外(擴展)功能,暴露出來,只要哪些類實現了這個接口,就一定要取實現接口中的功能!

格式:
    interface 接口名{

    }

接口的實現類和接口之間是一種實現關係
class 類名 implements(實現) 接口名{

    }

接口的子實現類:
1)如果接口的實現類是一個抽象類;沒有意義,接口本身不能實例化,需要通過子實現類來進行實例化,如果子實現類
都被抽象了,不能創建對象了,這種沒意義!
2)接口的實現類是具體類,接口名 對象名 = new 子實現類名() ; 接口多態(推薦方式:開發中這種方式最多)

接口不能實例化(不能創建對象)

實際開發中命名規則:
實現類命名規則:接口名+impl :實現類
接口的成員特點:
成員變量:
存在默認的修飾符: public static finla
構造方法:接口中沒有構造方法
成員方法:
默認的修飾符:public abstract
關係的區別:
類與類的關係
extends:繼承關係 單繼承,不能多繼承,但是可以多層繼承
類與接口的關係:implements :實現關係 ,並且一個類繼承另一個類的同時還能實現多個接口

接口與接口的關係:
        extends關係:可以是單繼承,可以是多繼承的!

任何類都需要繼承自Object類,代表所有類的根類.
形式參數問題
基本數據類型(不做研究,比較簡單)
引用類型
(具體)類 :需要該具體類對象
抽象類的情況:形參是一個抽象類,那麼實際需要該抽象類子類對象 (抽象類多態)
@author Administrator

多態: Fu f = new Zi() ;

    abstract  class Fu類:抽象類
    Fu f = new Zi() ;抽象類多態      

方法返回值的情況:
1)返回基本類型 :比較簡單 (返回什麼基本類型數據,用什麼基本類型接收)
String(特殊的引用類型)
2)引用類型:
(具體)類:需要返回的是該具體類 具體對象(或者匿名對象)
抽象類:需要返回的是該抽象類的子類對象
形式參數問題
基本數據類型(不做研究,比較簡單)
引用類型
(具體)類 :需要該具體類對象
抽象類
接口
方法返回值的情況:
1)返回基本類型 :比較簡單 (返回什麼基本類型數據,用什麼基本類型接收)
String(特殊的引用類型)
2)引用類型:
(具體)類:需要該具體類 具體對象(或者匿名對象)
方法的形式參數
接口類型:需要該接口的子實現類的對象
方法的返回值

    接口類型:返回值是一個接口類型,返回的時候,需要該接口的子實現類對象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章