java備考

1. 上轉型對象

        1.是什麼?  子類的對象賦給了父類對象,例如 Jk_Father j= jk;  其中,j  就是上轉型對象 ,上轉型之後 ,j  這個對象 不能訪問子類中新增的屬性和方法,所以它能調用的屬性和方法都是父類中原有的,如果子類覆蓋或重寫了由父類繼承下來屬性和方法,則調用的是覆蓋或重寫之後的值,總的來說,上轉型的效果相當於 子類對象不能訪問自己新增的屬性和方法了,其他正常。

 

package test1;

public class Jk extends Jk_Father{

	int workyear=12;
	
	int leval =23;
	
	@Override
	public void work() {
		System.out.println("工作了"+workyear+"年");
		System.out.println(age);
	}
	
	public void playGame() {
		System.out.println("play games ");
	}
	
	public static void main(String[] args) {
		Jk jk = new Jk();
		Jk_Father j= jk;
		j.work();
		j.leval;//不能調用新增的屬性和方法和方法
		j.playGame();//不能調用新增的屬性和方法和方法
	}
}

 

上轉型之後還可以進行下轉型,下轉型之後就還是子類的對象了,可以訪問子類中任何屬性和方法

Jk jjkk =(Jk)j;
jjkk.playGame();

但是父類直接下轉型到子類是不行的。只有像上面這樣,由子類上轉型成父類對象,然後再下轉型回子類對象可以,其他情況不行

 

Jk_Father jf = new Jk_Father();
Jk k = (Jk)jf;
k.playGame();



出現的錯誤:
java.lang.ClassCastException: test1.Jk_Father cannot be cast to test1.Jk
	at test1.Jk.main(Jk.java:29)

 

 

2.多態 

多態分爲 靜態多態性 和動態多態性。 

    Java實現多態有三個必要條件:繼承、重寫、向上轉型。

    在Java中有兩種形式可以實現多態:繼承和接口

     1.靜態多態性指的就是重載,重載的概念就是  一組方法 ,它們的方法名相同,但是參數列表不同,參數列表不同的情況有,參數的個數不同,參數的數據類型不同,和參數的數據類型的排列順序不同。這裏對返回值類型不做考慮。

      2.動態多態性指的就是重寫 override, 重寫的定義就是子類對父類繼承下來的方法做了修改,覆蓋了父類繼承下來的方法,重寫的方法的方法和父類的方法方法名,參數列表一樣,而且要求訪問範圍應該一樣或者更廣,比如父類是proteceted的,那麼子類重寫後應該至少默認,甚至public   訪問控制符的範圍   依次是  public, protected, default, private

下面這個就是多態   Jk_Father jf = new Jk(); 在下面的代碼中有。其實歸根到底還是一個上轉型對象,不能調用新增方法和屬性,一旦你重載了父類的方法,這個方法就是子類新增的方法了,這是上轉型對象就不能訪問了。很正常。另外,你去訪問重寫後的方法時,當然是訪問的是重寫之後地方法。

 

package test1;

public class Jk extends Jk_Father{

	int workyear=12;
	
	public int leval=23;
	
	public void work(int leval) {//這是重載
		System.out.println("工作了"+workyear+"年");
		System.out.println(leval);
	}
	
	/*public void work() {//這是重寫
		System.out.println("工作了"+workyear+"年");
	}*/
	
	public void playGame() {
		System.out.println("play games ");
	}
	
	public static void main(String[] args) {
		Jk_Father jf = new Jk();
		jf.work();
	}
}

 

3.異常  

分爲檢查時異常和運行時異常,檢查時異常我們必須處理,用try catch 去捕獲異常,要麼用throws 去拋出異常,運行時異常我們也可以不處理,系統會自動捕獲異常

 

 

 

這次的變量命名不太好,下次會改進的!!

最後貼一個自己覺得寫的更好的一篇博客:  https://www.cnblogs.com/chenssy/p/3372798.html

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