1. 程式人生 > >第七天繼承之繼承

第七天繼承之繼承

單繼承 基礎上 pan 多重 研發 sta 開發效率 employee bar

繼承的概述

繼承的概念

繼承描述的是事物之間的所屬關系,通過繼承可以使多種事物之間形成一種關系體系

在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出現同名變量時,遵循就近查找原則,用子類自己的


第七天繼承之繼承