首頁  >  文章  >  Java  >  Java 物件導向基礎 以及進階知識 總結

Java 物件導向基礎 以及進階知識 總結

PHP中文网
PHP中文网原創
2017-06-22 13:52:471269瀏覽

Controlling Access to Members of a Class.

private: 僅可以在自己的類別中使用

public: 哪裡都可以用

protected: package-private 就是在同一個套件下都可以使用,並且在別的套件下繼承他的子類別中也可以使用。

no-modifier: package-private 只能在同一個套件下使用( 對於同一套件下 與protected 相同)。在別的包不行。


Overriding 重寫和 Overloadding 重載

Overriding: 是用於子類與父類之間,除了函數體變化外其他的全部不變。且子類overriding的access controller 不能高於父類。

Overloadding: 是對同類中,方法之間。 參數清單必須改變,回傳類型可以改變或不改變。


Polymorphism 多型別

大體上可以理解為 

#ParentClass obj = new ChindClass();  //A

ChildClass obj2 = new ChildClass();  //B

ChildClass obj3 = new ParentClass(); //C 錯誤範例

         交給大家一個訣竅,為什麼會有這個設定。對於A, 我們聲明了ParentClass那麼我們就相當於在內存中給ParentClass中的變量和方法分別開了房間, 當我們new 的時候,就比如實際來了人來了ChildClass, 因為ChildClass中的變量和方法數量一定是大於或等於ParentClass中的,所以我們之前開的房間都住滿了,那麼飯店很開心,訂了多少住了多少。 對於C中, 我們預定了ChildClass中的變數和方法的房間,但是實際來的人是ParentClass,數量明顯小於ChildParent中的人,那麼訂的住不滿,飯店就很生氣,給你報了錯。 

overriding and overloadding 是多型式的重要體現形式。


Abstract Class 抽象類別

abstract class 能含有或不含abstract函數, abstract 函數必須用abstract 關鍵字來修飾。

只要一個類別含有一個abstract 函數那麼就必須對這個類別使用abstract 關鍵字來修飾。相同的在它的子類別中。


Interface 介面

介面就是比abstract 類別更極端的東西。它裡面的所有方法必須都是 abstract 方法, 不能含有instance field, 對於所有的constant 例如int等必須是 static 和 final的。

implement 它的必須是 實作所有的abstract方法就和abstract 一樣了。


Java Advanced Knowledge

#Generic Class

##很簡單通過下面的例子很明顯。例如arraylist或hashmap中都是generic的

package Generic;

//generic class
public class GenericMethodTest< A,Z > {
	//generic variable
	public A a;
	
	public void setA( A a) {
		this.a = a;
	}
	
	//generic methods
	public A getA () {
		return this.a;
	}
	public void printArray ( Z[] inArray) {
		for ( Z temp : inArray) {
			System.out.println(temp);
		}
	}
	
	public static < B > void printArray_2 (B[] inArray) {
		for (B temp : inArray) {
			System.out.println(temp);
		}
	}

}


#

package Implement;

import Generic.GenericMethodTest;

public class a{
	
	public static void main (String[] args) {
		GenericMethodTest<Integer,String> gm = new GenericMethodTest<Integer,String>() ;
		gm.setA(10);
		String[] ss = {"aaa", "bbb", "ccc"};
		Double [] bb = {1.0, 2.0, 3.0};
		gm.printArray(ss);
		gm.printArray_2(ss);
		gm.printArray_2(bb);
	}
	
}


Serialize  串列化

串列化簡單來講就是轉變存在的 實例化的物件 轉換成 byte陣列的一種技術或過程。它有很多好處,請看。

http://stackoverflow.com/questions/2232759/what-is-the-purpose-of-serialization-in-java

#簡單的串行化,可以根據下面的程式碼來學習下。

注意: 對於一些我們不想串列化的 區域 我們可以使用關鍵字

transient 來修飾。

package Serialize;

import java.io.*;

public class Employee implements Serializable{
	public String name;
	public String address;
	public transient int SSN;
	public int number;
	
	public void mailCheck (){
		System.out.println("Mailing a check to "+ name + " " + address);
	}

}


package Serialize;

import java.io.*;

public class SerializeDemo {
	
	public static void main (String[] args) {
		Employee e = new Employee();
		e.name = "Reyan df";
		e.address = "New York, ManhaThan";
		e.SSN = 1234433224;
		e.number = 101;
				
		try {
			FileOutputStream fileOut = 
					new FileOutputStream ("/Users/huazhe/Desktop/demo.ser");
			ObjectOutputStream out = new ObjectOutputStream (fileOut);
			out.writeObject(e);
			out.close();
			fileOut.close();
			System.out.println("Serialization done...");
		} catch (IOException i){
			System.out.println(i);
		}
		
	}
}


package Serialize;

import java.io.*;

public class DeserializaDemo {
	public static void main (String[] args) {
		Employee e = null;
		
		try {
			FileInputStream fileIn = new FileInputStream("/Users/huazhe/Desktop/demo.ser");
			ObjectInputStream in = new ObjectInputStream (fileIn);
			e = (Employee) in.readObject();
			in.close();
			fileIn.close();
			
		} catch (IOException i) {
			System.out.println(i);
		} catch (ClassNotFoundException c) {
			System.out.println(c);
		}
	System.out.println("Name: " + e.name);
	System.out.println("Address: " + e.address);
	System.out.println("SSN: " + e.SSN);
	System.out.println("Number: " + e.number);
	
	
	}

}

以上是Java 物件導向基礎 以及進階知識 總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn