Java 面向對象的三大特性
封裝
封裝通常基於4種訪問修飾符來實現:缺省、private、public和protected
假如我們想描述人的屬性,可以把人的相關屬性name,age...封裝成一個人類,屬於類層次的封裝,用一組相關屬性描述一類東西.
public class Teacher{ //老師類 public String name;//老師的名字 public Family family;//家庭類 List<Student> students;//老師名下的學生集合 }
一般情況下,這樣的數據封裝還不夠,我們還需要限制訪問權限
成員變量的封裝
class Bank{ private String money;//存款數目 public String getMoney() { return money;//銀行人員執行取款操作 } public void setMoney(String money) { this.money = money;//銀行人員執行存款操作 } }
成員方法的封裝:
/** * @author QinGuan * @date:2016-3-1 上午10:39:40 * @version :3.0 * */ package com.cloneTest; public class vocation implements Cloneable{ public String name; @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } public void setLoad(){ getLoad();//調用類中私有方法 } private void getLoad(){ //此方法被封裝,僅僅可以內部方法調用 System.out.println("load"); } }
以上的封裝是在屬性和方法的層次上,還有一種更加有意思的封裝形式是內部類,規則是:
成員內部類可以無條件訪問外部類的所有成員屬性和成員方法(包括private成員和靜態成員), 這個規則結合繼承,就巧妙的解決了Java單繼承的問題:
public class External extends Father { private String Exname; //內部類 class internal { private String inname; public void print() { System.out.println(Exname); fatherPrint();//可以直接訪問Father類的打印方法 } } public void get() { System.out.println(internal.class); } public String getExname() { return Exname; } public void setExname(String exname) { Exname = exname; } }
繼承
Java中的繼承通過關鍵字 extends 實現,子類繼承父類全部內容,但是可訪問的內容僅僅限於非 private 修飾的內容.
子類在實例化的時候,默認先調用父類的無參構造方法,所以父類一般會提供一個無參的構造方法以供子類調用,當然了,子類也可以通過 super(參數列表);來指定調用的父類構造方法
public class Father { public String name; Father() { } Father(String name) { this.name = name; } public class Son extends Father { private String name; Son (String name){ super(name);//調用父類的有參構造方法 }
多態
在繼承的基礎上的實現,父類的變量指向子類實例化的內容
參考資料:http://blog.csdn.net/thinkGhoster/archive/2008/04/19/2307001.aspx。
百度文庫:http://wenku.baidu.com/view/73f66f92daef5ef7ba0d3c03.html
方法的重寫和重載
重載,屬於同一個類中的方法,方法名一樣,參數列表不同,返回值類型可以相同也可以不相同。
重寫,子類對繼承自父類的方法進行重新實現.相同的方法簽名,相同的返回值,不小於父類方法的訪問權限