第七天繼承之繼承

繼承的概述

    繼承的概念

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

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章