JAVA面向對象總結

面向對象的多態性

學習目標:

  1. Object類的toString()與equals(Object obj)方法
  2. 面向對象的多態性
  3. 抽象類與接口
    一:Object類
    Object類是所有Java類的根基類(“祖先類”)
    如果在類的聲明中未使用extends關鍵字指明其基類,則默認基類爲Object類
    public class Person{
    ...
    }
    等價於:
    public class Person extends Object{
    ...
    }
    1.toString()方法
    Object類中定義有public String toString()方法,其返回值是String類型,描述當前對象的有關信息。
    如果直接打印某對象的引用,則默認會調用這個對象的toString()方法,默認打印的內容中包含這個引用所指向的內存地址。
    可以根據需要在用戶自定義類中重寫toString()方法。
    2.equals()方法
    Object類中定義有public boolean equals(Object obj) 方法,提供定義對象是否“相等”的邏輯。
    Object的equals方法定義爲:x.equals(y),當x和y指向同一個地址時返回true,否則返回false。
    String類中已經重寫了equals(Object obj)方法,重寫後的方法比較的是兩個字符串的”內容”是否一樣(注意:==比較對象的引用)。
    可以根據需要在用戶自定義類型中重寫equals方法。
    二:多態性
    封裝是爲了保護屬性的一種操作,繼承是爲了擴展類的功能

是由封裝性和繼承性引出的面向對象程序設計語言的另一特徵。
多態的體現
從方法的角度來看:
方法的重載與重寫
重載(overloading):根據傳入的參數不同,完成的功能也不同
重寫(override):子類根據需求重寫父類中的方法。
從對象的角度來看:
對象的多態性主要分爲兩種:
向上轉型: 子類對象->父類對象 (程序會自動完成)
格式:
父類 父類對象=子類實例
向上轉型後,因爲操作的是父類對象,所以無法找到在子類中定義的新方法;但如果子類重寫了父類的某個方法,則調用的是重寫後的方法。
向下轉型:父類對象->子類對象 (必須明確的指明要轉型的子類類型)格式:
子類 子類對象=(子類)父類實例
注意:向下轉型前先要向上轉型。
instanceof關鍵字
在java中可以使用instanceof關鍵字判斷一個對象是否屬於一個類的實例
格式:
對象 instanceof 類 返回boolean類型
final關鍵字
在JAVA中聲明類、屬性和方法時,可以使用關鍵字final來修飾。
注意:
1.final修飾變量(成員變量或局部變量),則成爲常量,只能賦值一次
final 類型 variableName;
修飾成員變量時,定義時同時給出初始值,而修飾局部變量時不做要求。
2.final修飾方法,則該方法不能被子類重寫
final 返回值類型 methodName(paramList)
{

}
3.final修飾類,則類不能被繼承
final class finalClassName{

}
三:抽象類與接口
用abstract修飾的類即爲抽象類
abstract class 抽象類名{
}

抽象類不能被實例化,必須被繼承,抽象方法必須被重寫,生成它的子類。
由abstract修飾的方法就是抽象方法,抽象方法沒有方法體。
抽象類不一定要包含抽象方法,若類中包含了抽象方法,則該類必須被定義爲抽象類
如果一個子類沒有實現抽象父類中所有的抽象方法,則子類也成爲一個抽象類。
構造方法、靜態方法、私有方法、final方法不能被聲明爲抽象的方法。
接口
接口(interface)是抽象方法和常量值的定義的集合。
接口是一種“標準”、“契約”。
從本質上講,接口是一種特殊的抽象類,這種抽象類中只能包含常量和方法的定義,而沒有變量和方法的實現。
接口的聲明語法
包括接口聲明和接口體
完整的接口聲明:
[public] interface 接口名稱[extends listOfSuperInterface] { … }
接口體包括常量定義和方法定義
常量定義: type NAME=value; 該常量被實現該接口的多個類共享; 具有public ,final, static的屬性.
方法體定義:具有 public和abstract屬性
接口的實現類
與抽象類一樣,接口要使用也必須通過子類,子類通過implements關鍵字實現接口
一個類可以實現多個接口,在implements子句中用逗號分開
非抽象子類必須實現接口中定義的所有方法

實現格式:
class 子類 implements接口A,接口B…{
}
接口的使用規則
接口中所有的方法都是public abstract。
在接口中聲明方法時,不能使用static,final,synchronized,private,protected等修飾符。
一個接口可以繼承自另一個接口。
java中不允許類的多繼承,但允許接口的多繼承。

接口中可以有數據成員,這些成員默認都是public static final
接口的用途
用處
(1)通過接口實現不相關類的相同行爲,而無需考慮這些類之間的關係.
(2)通過接口指明多個類需要實現的方法
(3)通過接口瞭解對象的交互界面,而無需瞭解對象所對應的類

第八天課程內容

學習目標:
1.基本數據類型的包裝類
2.String類、StringBuffer類、StringBuilder類
3.內部類
一:基本數據類型的包裝類
Java語言針對所有的基本數據類型都提供了對應的包裝類。
基本數據類型————————包裝類
byte(字節———————— java.lang.Byte
char(字符)——————— java.lang.Character
short(短整型)—————— java.lang.Short
int(整型)———————— java.lang.Integer
long(長整型)—————— java.lang.Long
float(浮點型)—————— java.lang.Float
double(雙精度)————— java.lang.Double
boolean(布爾)—————— java.lang.Boolean
包裝類和基本類型
基本數據類型轉換爲包裝類:Integer intValue = new Integer(21);
包裝類轉換成基本類型:Integer integerId=new Integer(25); int intId=integerId.intValue();
自動裝箱、拆箱
JDK5.0中爲基本數據類型提供了自動裝箱(boxing)、拆箱(unboxing)功能:
裝箱:將基本數據類型包裝爲對應的包裝類對象
拆箱:將包裝類對象轉換成對應的基本數據類型
Integer intObject = 5;
int intValue = intObject;
包裝類並不是用來取代基本類型的
二:字符串相關類

  1. String類
    (1) String代表字符串類型,字符串的內容本身不可改變,字符串存儲於“字符串常量池”中。
    (2)String的兩種實例化方式
    a:直接賦值法:
    eg: String str=“Hello World”;
    b:通過new操作符實例化:
    eg: String str=new String(“Hello World”);
    (3)一個字符串就是一個String類的匿名對象。
    所謂匿名對象,就是在堆內存中開闢了空間,但在棧內存中並沒有引用指向的對象。
    (4)字符串常用方法

  2. StringBuffer類:
    (1)StringBuffer代表可變的字符序列。
    StringBuffer稱爲字符串緩衝區,它的工作原理是:預先申請一塊內存,存放字符序列,如果字符序列滿了,會重新改變緩存區的大小,以容納更多的字符序列。
    (2)StringBuffer是可變對象,這個是與String最大的不同(如果連續操作String對象,則會產生大量的“垃圾”,而且“斷開-連接”很頻繁。)
    3.StringBuilder類
    StringBuilder和StringBuffer功能幾乎是一樣的,只是 StringBuilder是線程不安全的
    三:內部類
    1.在類的內部定義另一個類。如果在類Outer的內部再定義一個類Inner,此時Inner就稱爲內部類,而Outer則稱爲外部類。
    2.內部類的定義格式
    3.內部類在編譯完成後也會產生.class文件,而文件名稱則是”外部類名稱$內部類名稱.class”
    public class 外部類{
    //外部類的成員
    public class 內部類{
    //內部類的成員
    }
    }
    使用內部類的原因
    比如:心臟屬於人類的某個部分:但心臟不能簡單用屬性或者方法表示一個心臟,因爲心臟也有自己的屬性和行爲,所以需要寫在人類的內部
    好處:
    1 可以方便地訪問外部類的私有屬性
    2 減少了類文件編譯後的產生的字節碼文件的大小

缺點:使程序結構不清楚
1.成員內部類
成員內部類中不能定義static變量
成員內部類持有外部類的引用
在文件管理方面,成員內部類在編譯完成後也會產生.class文件,而文件名稱則是”外部類名稱$內部類名稱.class”
外部實例化成員內部類的格式:
外部類.內部類 內部類對象=外部類實例.new 內部類();
2.靜態內部類

如果一個內部類使用static聲明,則此內部類就稱爲靜態內部類,其實也相當於外部類。可以通過外部類.內部類來訪問。
靜態內部類不會持有外部類的引用,創建時可以不用創建外部類對象
靜態內部類可以訪問外部的靜態變量,如果訪問外部類的非static成員變量必須通過外部類的實例訪問
外部實例化靜態內部類對象的格式:
外部類.內部類 內部類對象= new 外部類.內部類();
3.局域內部類
局域內部類是定義在一個方法中的內嵌類,所以類的作用範圍僅限於該方法中,而類生成的對象也只能在該方法中使用。
局域內部類不能包含靜態成員
特別注意:局域內部類要想訪問包含其的方法中的參數,則方法中的參數前必須加上final關鍵字(JDK<=1.7)。
4.匿名內部類
如果一個內部類在整個操作中只使用一次的話,就可以定義爲匿名內部類
沒有名字的內部類,這是java爲了方便我們編寫程序而設計的一個機制,因爲有時候有的內部類只需要創建一個它的對象就可以了,以後再不會用到這個類,這時候使用匿名內部類就比較合適

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章