1. 程式人生 > 其它 >Java面向物件-封裝與繼承

Java面向物件-封裝與繼承

技術標籤:java多型封裝

面向物件的三個特徵:

封裝,繼承和多型

封裝:將類的某些資訊隱藏在類的內部,不允許外部直接訪問,而是通過該類提供的方法對隱藏資訊進行寫入和讀出;

封裝是通過private來隱藏屬性,通過setter來寫入(加入限制條件),通過getter來讀出;

隱藏+寫入的話:

public class Person{
	Private String sex;
	public void setSex(String sex){
	if(sex.equals("男")||sex.equals("女")){
	this.sex=sex;
}
else{ System.out.println("輸入不合法!"); } public String getSex(){ return this.sex; } }

呼叫的話:

public class Diaoyong{
	Person a=new Person();
	a.setSex("男");
	System.out.println(a.getSex);
}

包:
包的命名:通常使用組織的網路域名的逆序,後面加上部門名、機構名、專案名等;如cn.kgc.kb11

package的申明和匯入其它包中的類的話:
其中包的申明必須位於第一行:

package cn.kgc.kb11;
public class Diaoyong{
	Person a=new Person();
	a.setSex("男");
	System.out.println(a.getSex);
}
import cn.kgc.kb11.Diaoyong;
public class Diaoyong2{
	Person a=new Person();
	a.setSex("男");
	System.out.println(a.getSex);
}

static關鍵字:

靜態方法不能直接呼叫普通方法和普通屬性,需要用物件.方法/屬性來呼叫;

用static關鍵字修飾的屬性為類屬性,可以直接用類名.屬性名呼叫,在記憶體中只有一個拷貝;沒用static修飾的屬性稱為例項變數,每次建立一個例項,就會為例項變數分配一次記憶體;static修飾的方法稱為類方法,可以直接用類名.方法名();呼叫。

public class Person{
	public static String name;
	public static void work(String name){
	System.out.println(name);
	}
}
public class PersonTest{
	Person.name="abc";
	Person.work(abc);
}

static程式碼塊
靜態程式碼塊,當Java虛擬機器載入類時,就會預設執行一次。而且只有第一次載入時預設執行,後面載入時不預設執行了,不過引用執行還是會執行的

public class StaticTest{
	static int num=100;
	static{
		num+=100;
		System.out.println(num);
		}
		static{
		num+=100;
		System.out.println(num);
		}
}
public class PersonTest{
	StaticTest st1=new StaticTest();
	StaticTest st2=new StaticTest();
	System.out.println(StaticTest.num);
}

繼承:新類可以在不增加程式碼的情況下,通過extends來繼承已有類的屬性和方法,來充實自己的內容。該新類為子類,已有的類為父類。
(不能被繼承的父類成員:private成員,構造方法,子類與父類在不同的包中而使用預設訪問許可權的成員)

子類訪問父類成員:

  1. 訪問父類構造方法:
    super();
    super(name);
  2. 訪問父類屬性:
    super.name;
  3. 訪問父類方法:
    super.print();

super關鍵字代表父類的意思,訪問父類構造方法時需要在構造方法的第一行;不能訪問private成員;

繼承條件下構造方法的呼叫規則:

  1. 子類構造方法沒有通過super顯示呼叫父類的有殘構造方法,也沒通過this顯示呼叫自身其他構造方法,則系統預設呼叫父類的無參構造方法;
  2. 子類構造方法通過super顯示呼叫父類的有參構造方法,則執行父類相應構造方法,而不執行父類無參構造方法
  3. 子類構造方法通過this顯示呼叫自身的其它構造方法,在相應的構造方法中應用以上兩條規則

多型:通過多個子類各自的方法重寫,使得該方法在處理不同物件時,輸出不同的結果;
以下將父類當做返回值型別:

class Host{
	public Animal donateAnimal(String type){//該方法donateAnimal的返回值型別為Animal,
返回值animal也可以(當做變數賦值)賦給不同的子型別;
	Animal animal;
	if(type=="dog"){
		animal=new Dog();
	}else if(type=="cat"){
		animal=new Cat();
	}else{
		animal=new Duck();
	}
	return animal;
}
}
public class Test{
	public static void main(String[]args){
	Host host=new Host();//新建Host物件,用來引用Host的方法;
	Animal animal;//新建animal物件,接收Host方法傳出來的animal某個子類物件!好他媽繞
	animal=host.donateAnimal("");
	animal.cry();
	animal=host.donateAnimal("");
	animal.cry();
}
}