面向对象-继承和多态

1.什么是继承

  多个类中存在相同的属性和行为,将这些属性和行为提取到单独的类中,那么多个类中无需再次定义这些属性和行为,只需继承那个类即可。

  通过关键字extends可以实现类与类的继承。

  class 子类名 extends 父类名{}

  案例:学生类和老师类,定义两个功能(吃饭和学习),都同时为人类

    class Person{

      String name;

      int age;

      public void eat(){ System.out.println("吃饭");}

      public void study(){ System.out.println("学习");}

    }

    class Student extends Person{ } 

    class Teacher extends Person{ }

    public class Test{

    public static void main(String[] args){

    Student student = new Student();

    student.eat();

    student.study();

    Teacher teacher = new Teacher();

    teacher.eat();

    teacher.study();

    {

    {

    继承的优缺点:

    1)提高了代码的复用性。

    2)提高了代码的维护性。

    3)让类与类产生了关系,是多态的前提,同时也是缺点耦合性很强。

    继承的特点:

    1)一个类只能有一个父类。

    2)支持多层继承。

      class A{}

      class B extends A{}

      class C extends B{}

    注意事项:子类只能继承父类所有非私有的成员(成员方法和成员变量) 。

         其实这也体现了继承的另一个弊端:打破了封装性

         子类不能继承父类的构造方法,但是可以通过super(后面讲)关键字去访问父类构造方法。       

         不要为了部分功能而去继承。

    

      继承中成员变量的关系

      在子类方法中访问一个变量

        首先在子类局部范围找

        然后再子类成员范围找

        最后再父类成员范围找(肯定不能访问到父类局部范围)

        如果还是没有就报错(不考虑父类的父类...)  

    super关键字  

    super的用法和this很像

      this代表本类对应的引用。

      super代表父类存储空间的标识(可以理解为父类引用)

    用法(this和super均可如下使用)

      访问成员变量

        this.成员变量   super.成员变量

      访问构造方法

        this(…)   super(…)

      访问成员方法

        this.成员方法()   super.成员方法()

    继承中构造方法的关系

      子类中所有的构造方法默认都会访问父类中空参数的构造方法 , 因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。 每一个构造方法的第一条语句默认都是:super()。

      如何父类中没有构造方法,子类通过super去显示调用父类其他的带参的构造方法 子类通过this去调用本类的其他构造方法 本类其他构造也必须首先访问了父类构造 一定要注意: super(…)或者this(….)必须出现在第一条语句山 否则,就会有父类数据的多次初始化。

    通过子类对象去访问一个方法

      首先在子类中找 然后在父类中找 如果还是没有就报错。(不考虑父类的父类…)

    方法重写概述

      子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写。

      使用特点: 如果方法名不同,就调用对应的方法 如果方法名相同,最终使用的是子类自己的       方法重写的应用: 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。

    方法重写的注意事项

      父类中私有方法不能被重写 子类重写父类方法时,访问权限不能更低 父类静态方法,子类也必须通过静态方法进行重写。(其实这个算不上方法重写,但是现象确实如此)

    final关键字

    final关键字是最终的意思,可以修饰类,成员变量,成员方法。 修饰类,类不能被继承 修饰变量,变量就变成了常量,只能被赋值一次 修饰方法,方法不能被重写

1.什么是多态。

  一个事物在不同时刻表现出来的不同状态。

  举例:猫可以是猫的类型。猫 a = new 猫();

     猫也是动物的一种,也可以把猫称为动物。动物 b = new 猫();

  注意:多态前提是有继承关系、有方法重写、有父类引用指向子类对象。

posted @ 2022-03-21 22:04  俊熙777  阅读(42)  评论(0编辑  收藏  举报