1. 程式人生 > >Java自學筆記(八)

Java自學筆記(八)

面向物件——繼承


繼承的思想其實很好理解,但是裡面有些東西需要記憶。

理解,繼承可以將之前的類沿襲下來,保留被繼承類的功能。

使用方法:class 類名稱 extends 父類名稱 { ……

} 例項:
package storeName;
//建立父類(也叫超類)
public class storename {
	String name;
	void printName() {
		System.out.println("我是一個商品");
	}
}
//建立子類 
package storeName;

public class storename2 extends storename {
	void printMessage() {
		System.out.println("我很貴的!");
	}
}
//主函式執行
public class storeTest {

	public static void main(String[] args) {
			storename2 st = new storename2();
			System.out.println(st.name = "黃金");
			st.printName();
			st.printMessage();
			
	}

}

需要注意,假設有A、B、C三個類, A可以繼承B,同時A也可以繼承C(C可以繼承A,B可以繼承A)但是不能同時繼承B和C (在Python裡面是多繼承的,有它一套順序),另外父類私有的成員變數和私有方法不能繼承,也所以私有方法不能重寫。

A可以繼承B,同時B可以繼承C,那麼A就是孫子了……

關於重寫 子類和父類的方法是一樣的(包含修飾符和名字以及給定引數等等),重寫(覆蓋)是不同類之間,而過載是對方法的重新描述,給定引數的型別和個數至少有一點不一樣。

在new一個子類之後,如果有同樣的基本型別或者重寫的方法,先執行子類的資料型別賦值和其方法;若同時存在,如果需要強制執行父類的賦值(成員變數),需要使用 super
,可以對比以前的this,專門對類進行表達~~ 另外,在重寫過程中,子類的許可權要關於父類 public > protected > default(不寫,寫了反而報錯) > private
package storeName;
//建立父類(也叫超類)
public class storename {
	String name;
	int i =6;
	void printName() {
		System.out.println("我是一個商品");
	}
	void printJiage( ) {
		System.out.println("無價之寶23333");
	}
}
//建立子類 
package storeName;

public class storename2 extends storename {
	int i = 7;
	void printMessage() {
		System.out.println("我很貴的!");
	}
	void printJiage( ) {
		System.out.println("無價之寶");
	}
}
//主函式執行
public class storeTest {

	public static void main(String[] args) {
			storename2 st = new storename2();
			System.out.println(i);  \\7
			st.printName("無價之寶"); \\"無價之寶"
			
			
	}

}

繼承之抽象類知識點 PS:抽象方法表達方式

public abstract 返回值型別 方法名稱() 

抽象類表達方式 abstract class 類名稱{}

抽象方法只能放在抽象類,但是抽象類裡面不一定要抽象方法;抽象類不允許建立物件,畢竟是抽象的……如果需要建立物件,應該在抽象類的子類裡面建立;但是呢,必須重寫抽象類中所有的抽象方法,其子類才能建立物件,否則還是抽象的…… 這裡不得不給出例子來解釋,不然以後自己也會繞暈吧…… 另外,抽象類一定是父類,修飾詞肯定不能是private,final,static


      abstract class A{
      	public abstract void func();
      	public abstract void func2();
      }
      class B extends A{//B把A中的兩個抽象方法都重寫
      	                 //B類不再是抽象類,可以例項化為物件,注意,例項化過程沒有了關鍵字abstract,可以補充方法體{}
      	 public void func(){}
      	 public void func2(){}
      }

      abstract class C extends A{//C含有抽象方法的類一定是抽象類
      	 public void func(){

      	 }
      	 //public abstract void func2();//func2相當於被繼承下來
      }