第七天继承之继承

继承的概述

    继承的概念

    继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系

    在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出现同名变量时,遵循就近查找原则,用子类自己的


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