第七天繼承之繼承
繼承的概念
繼承描述的是事物之間的所屬關系,通過繼承可以使多種事物之間形成一種關系體系
在java中,類的繼承是指在一個新的類的基礎上去構建一個新的類.
如果類B從類A中派生,或者說類B擴展自類A 或者說 類B繼承於類A
稱類A為"父類"也叫超類或基類
稱類B為"子類"也叫次類,擴展類,派生類
繼承關系的子類特點
子類會自動擁有父類所有的非私有的屬性和方法,同時也可以添加新的屬性和方法,但是不可以刪除父類的方法
子類可以用自己的方式實現父類的方法
java的繼承是單繼承但可以多重繼承,單繼承就是一個子類只能繼承一個子類,多重繼承是 a繼承b b繼承c 按關系來說c是b的父類,也是a的父類,同時b也是a的父類
提高了類之間的耦合性(繼承的缺點,加強了類之間的聯系)
繼承的定義格式和使用
繼承的格式
class 子類名 entends 父類{}
案例雇員(Employee)與研發部員工(Developer)
Employee.java: /* * 定義員工類Employee */ class Employee { String name; // 定義name屬性 public void work() {// 定義員工的工作方法 System.out.println("盡心盡力地工作"); } } Developer.java: /* * 定義研發部員工類Developer 繼承 員工類Employee * 繼承了父類中所有非private修飾的成員變量 */ class Developer extends Employee { // 定義一個打印name的方法 public void printName() { System.out.println("name=" + name); } } 測試員工類與研發部員工類: /* * 定義測試類 */ public class Example01 { public static void main(String[] args) { Developer d = new Developer(); // 創建一個研發部員工類對象 d.name = "小明"; // 為該員工類的name屬性進行賦值 d.printName(); // 調用該員工的printName()方法 d.work(); // 調用Developer類繼承來的work()方法 } }
通過子類對象既可以調用自身的非private修飾的成員,也可以調用父類的非private修飾的成員
繼承的好處
1提高了代碼的復用性,提高了軟件的開發效率
2讓類與類之間產生了關系,通過了多態的前提
繼承的缺點
1打破了封裝,基類向子類暴露了實現的細節,子類可以訪問基類的屬性和方法
2削弱了子類的獨立性,當父類改變時,子類也不得不改變
繼承層次
繼承並不只限於一個層次.有一個公共超類派生出來的所有類被稱為繼承層次
繼承鏈:從某個特定的類到器祖先的路徑被稱為該類的繼承鏈,通常一個祖先可以擁有多個子孫繼承鏈
繼承的註意事項
1在java中類只支持單繼承不允許多繼承,也就是說下面是不合法的.
class A{} class B{} class C extends A,B{} // C類不可以同時繼承A類和B類
如果支持會發生聲明呢
class A{ int a=3; public void method(){ } } class B{ int a=5; public void method(){ } } class C extends A,B{ } class Demo{ public static void main(String[] args){ C c=new C(); System.out.println(c.a);//到底是調用A的還是B的成員變量??無法確定 c.method();//到底是調用A的還是B的成員方法??無法確定 } }
2多個類可以繼承一個父類,下面的情況就是允許的
class A{} class B extends A{} class C extends A{} // 類B和類C都可以繼承類A
3多層繼承是可以的即一個類的父類可以再去繼承另外的父類,
class A{} class B extends A{} // 類B繼承類A,類B是類A的子類 class C extends B{} // 類C繼承類B,類C是類B的子類,同時也是類A的子類
4父類和子類是一種相對的概念 一個類是某個類父類的同時,也可以是另一個類的子類。
5繼承是為"是一個"的關系建模的,父類和其子類間必須存在"是一個"的關系,否則不能用繼承。
但也並不是所有"是一個"的關系都應該用繼承。例如,正方形是一個矩形,但不能讓 Square 類來繼承 Rectangle 類,因為正方形不能從矩形擴展得到任何東西。正 確的繼承關系是 Square 類繼承 Shape 類
繼承的體系
動物(吃)
|
-------------------------
| |
貓科動物(吃,胎生) 爬行動物(吃,卵生)
| |
------------------------------- -------------------------
| | | |
貓(吃,抓老鼠,胎生) 虎(吃,領地,胎生) 蛇(吃,冬眠,卵生) 鱷魚(吃,潛水,卵生)
動物是對每個具體事物共性的抽取,子類的共性抽取為父類
父類:具有子類的共同特性
子類不僅有共同特性還有自身獨有的內容
整個繼承越往上越抽象,越往下越具體
繼承後子類父類成員變量的特點
1子類調用成員變量是,子類自己有就用字的,沒有就用父類的
2出現同名變量時,遵循就近查找原則,用子類自己的
第七天繼承之繼承