一、對象轉型
1、向上轉型:父類的引用指向子類的對象(父類的引用指向子類的對象的時候不能使用子類多出來的成員)
2、向下轉型:簡單一句話其實就是強制類型轉換
二、toString()
預設調用情況:1、使用System.out.println() 控制台上只顯示字串,所以在列印之前要先轉換成字串類型再輸出
2、當出現使用‘+’號連接字串的時候
toString
方法返回一個字串,該字串由類名(對象是該類的一個執行個體)、at 標記符“@
”和此對象雜湊碼的無符號十六進位表示組成。
在自己寫的類中建議重寫toString()方法,這樣有時候會使我們的程式更加簡潔輸出介面更加美觀
如下程式重寫的toString()方法使得程式輸出更加美觀:程式中規定了toString的輸出方式,使得程式的輸出美觀
public class test{ public static void main(String[] args){ Person p1 = new Person("jack",34); Person p2 = new Person("tom",21); System.out.println(p1); System.out.println(p2); }}class Person{ Person(String name,int age){ this.name = name; this.age = age; } String name; int age; public String toString(){ return ("name is:" + name + " age is:"+ age); }}
三、“==”和equals的區別以及使用方法
“==”比較的棧區的內容;而equals比較的是堆區的內容
一般我們在寫一個類的時候最好是重寫equals方法,這樣的話可以滿足使用者自己的需要來進行對象之間的比較,用以實現使用者的相關功能
但是如果我們重寫了equals的方法也一定要重寫hashCode()方法
相等的對象一定有相等的雜湊碼 相等的雜湊碼不一定有兩個相等的對象(因為記憶體中有相同的雜湊碼的一片地區可以有很多個對象)
例如一下程式重寫的equals方法:我們可以自己規定equals的比較方法
public class test{ public static void main(String[] args){ Person p1 = new Person("jack",21); Person p2 = new Person("tom",23); System.out.println(p1.equals(p2)); }}class Person{ Person(String name,int age){ this.name = name; this.age = age; } String name; int age; public boolean equals(Object obj){ Person p = (Person)obj; if(this.name.equals(p.name)){ return true; }else{ return false; } }
public int hashCode(){
return this.name.hashCode();
}}
四、final關鍵字
1、加在成員變數上,表示常量
2、加在方法上,表示不能被重寫
3、加在類上,表示不能被繼承
五、abstract(抽象的)
1、加在類上,不能執行個體化(不能建立對象)
2、一個類是用來被繼承的,比如說多態的時候父類的引用指向子類的對象的時候,父類不需要執行個體化
3、抽象的方法就是用來被重寫的,並且方法是抽象的那麼類也必須是抽象的
4、抽象的類中可以有抽象的方法也可以有非抽象的方法
六、interface(介面)
1、介面就是一種特殊的抽象的類(只有抽象方法和常量)
2、它就是一種規範標準
3、介面稱之為類實現了介面,方法也稱之為實現
4、介面與類之間叫實現,介面之間叫繼承,介面可以有多個,父類只能有一個,
方法都是預設的 public abstract類型 常量預設都是public fianl static
一下程式詳細的描述了介面的幾大特徵的呈現:
public class test{ public static void main(String[] args){ Animel animel = new Animel(); animel.catching(); animel.sleep(); animel.run(); }}interface cat{ //寫一個介面 public void catching();}interface mouse{ public void run(); //這是一個抽象方法}interface dog{ int num = 10; // 一個抽象的常數 其詳細的表示方法為:public fianl static int num = 10; public void see();}interface pig extends cat,mouse,dog{ //多繼承,介面之間繼承可以有多個 public void sleep();}class Animel implements pig{ //類與介面之間為實現 只允許有一個父類 public void catching(){ System.out.println("cat is catching"); } public void run(){ System.out.println("mouse is running"); } public void sleep(){ System.out.println("pig is sleeping"); } public void see(){ System.out.println("dog is see"); }}