---
# System prepended metadata

title: Basic
tags: [Java]

---

# Basic
###### tags: `Java`
**Package**
 - 組織專案
 - 製造出命名空間
 - 實現封裝

**Import**

 - import的用意只是幫程式設計師省去每個class的package名稱！
 - 預設載入的package => java.lang* 、目前所在的package

**資料型態**
1.基本資料型態 primitive data type
	byte、short、int、long、boolean、float、double、char
2.參考資料型態 reference data type
	
在使用基本資料型態的物件型時 Ex Long 、 Integer ...
在使用==比較時要注意cache的問題會導致結果有問題


	Long.valueOf(128) == Long.valueOf(128); // false


**封裝**
資訊隱藏 : 只讓外部看到外部需要看到的部份


**繼承關係**
使用IS-A來驗證繼承結構的合理性
EX : 鋼琴、河馬皆會發生聲音，但這兩個物件的關係對於繼承結構來說並不合理，
因此在這個場景正確的方式是抽象出聲音物件，而兩者會是以HAS-A來運用該物件

**繼承意義**
藉由提取出一群class間的共同抽象性，將這個部分擺在superclass，如此一來共通的部分需要修改的話只需要修改一個地方，且這樣的修改會套用到所有繼承的class，修改後只需要重新編譯就好不需動到subclass

 - 避免重複程式碼
 - 定義出共通的協議
  
繼承讓你可以確定某個supertype之下的所有class都會有supertype允許持有的所有方法
換言之，妳會透過繼承來定義相關class間的共通協議

限制繼承的方法

 1. 存取控制 > 除了inner class ，class只能用public 或 沒修飾字(同包才能繼承)
 2. 使用final 修飾  
 3. 讓class只擁有私有建構子

共通協議限制
override

 1. 回傳型別必須相容
 2. 存取權限不能縮小
 3. 例外等級不能放大

overload

 1. 必須有不同的參數。 ex : 順序 、 型態、數量
 2. 不能只改變回傳型態、可以任意變更存取權限


**多型**
一個物件多種類型

指父類別可透過子類別衍伸成多種型態，而父類別為子類別的通用型態，再透過子類別可覆寫父類別的方法來達到多型的效果，也就是同樣的方法名稱會有多種行為。

