Java面向對象(220)面向對象的特點3

一. 多態數組:

  1. 多態數組:多態在Java應用程序中被廣泛使用。多態數組是多態的用途之一。
  2. 多態數組—在引用類型的數組中,使用多態形式存放對象。
  3. 例:要求創建五個年齡不等的Person、Student和Teacher對象,並將他們按年齡排序輸出,應當如何實現?(Person父類 , Student和Teacher是子類)
public class Test{
		public static void main(String[] args){
Person[] person = { new Person(“張三”,32),
							new Student(“李四”,21,120,90.0),
							new Student(“王五”,25,110,91.5),
							new Teacher(“劉老師”,35),
new Teacher(“王老師”,40)};
				for(int i=0;i<person.length-1;i++){
					for(int j=i+1;j<person.length-1;j++){
		if(person[i].getAge()<person[j].getAge()){
	Person p = person[i];
	Person[i] = person[j];
	Person[j] = p;
}
}
}
}
}
  1. 因爲computer和pc和notepad是子父類關係所以可以放到computer數組中。所有對象都可以放到object數組中。
public class Test{
		public static void main(String[] args){//Computer爲父類,Notepad,PC爲子類
	Computer c1 = new Computer();
	NotePad n1 = new NotePad();
				PC p1 = new PC();
				Computer c2 = new PC();
				Computer c3 = new NotePad();
				Computer[] coms = new Computer[5];
				Object[] obj = new Object[5];
				coms[0] = c1;
				coms[1] = n1;
	coms[2] = p1;
	coms[3] = c2;
	coms[4] = c3;
}
}
  1. 當沒有子父類關係時,就不能子類代替父類傳參(下圖Student爲Person的子類)(當Student獨立時,method(s)顯示錯誤)
public class Test{//父類:p 屬性name  //子類:S 屬性 score
public static void main(String[] args){
	Person p = new Person();
	p.setName(“張三”);
	
	Student s = new Student();
	s.setName(“小紅”);
	s.setScore(30.2);

	method(s);
}
public static void method(Person p){
	system.out.println(p.getName);
}
}

二. 抽象類:

  1. 抽象類:隨着繼承層次中一個個新子類的定義,;類變得越來越具體,而父類則更一般,更通用。類的設計應該保證父類和子類能夠共享特徵。有時將一個父類設計的非常抽象,以至於它沒有具體的實例,這樣的類叫做抽象類。
  2. abstract class
  3. 用abstract關鍵字來修飾一個類時,這個類叫做抽象類;
  4. 用abstract來修飾一個方法時,該方法叫做抽象方法。
  5. 抽象方法:只有方法聲明,沒有方法的實現。以分號結束: abstract int abstactMethod(int a);
  6. 含有抽象方法的類必須被聲明爲抽象類。
  7. 抽象類不能被實例化。抽象類是用來被繼承的,抽象類的子類必須重寫父類的抽象方法,並提供方法體。若沒有重寫全部的抽象方法,仍爲抽象類。
  8. 一個普通的類繼承一個抽象類時必需要重寫父類抽象方法
    如果子類是抽象類就不用重寫(也可以寫)
    //抽象類
public abstract class Animal{
	public String name;
	public int age;
	//抽象方法(abstract修飾,所以沒有方法體)
public abstract void sleep();
}
public class Student extents Animal{//需要重寫
	private int id;
	private double score;
public abstract void sleep(){
	System.out.println(“hello!);
}
}
public abstract class Student extents Animal{//不需要重寫
	private int id;
	private double score;
}
  1. 不能用abstract 修飾屬性、私有方法、構造器、靜態方法、final的方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章