zoukankan      html  css  js  c++  java
  • 关于继承的基本知识,方法重写,final和abstract的使用, 动态绑定和静态绑定的知识

    一、继承: 涉及关键字: extends(继承) super final abstract

        特点: 1、类与类之间可以用 XX是XX来描述 , 那么他们之间就存在继承关系。
            2、Java中不支持多继承: 以免发生继承的同名方法冲突。
            3、Java支持多层继承。(也就是存在继承体系,要学会如何使用一个继承体系的功能。)

        描述: 当A 类 继承与B 类的时候 代码为: class A extends B {}
                  class S extends B implements interface1 ,interface {}

        优点: 1、提高了代码的复用性。
            2、让类与类之间产生关系, 有了这个关系, 才有了多态的出现。

        注意:如果类与类之间没有所属关系,就不要为了获得其他类的成员而强行定义继承关系。


    二、对继承体系的使用方法

        1、要想使用一个继承体系,就应该先去查阅这个父类的描述, 因为这个父类中定义的是所有子类的共性成员和功能。
      通过对父类中这些功能的了解,就可以知道子类所继承的功能的特点。

        2、在具体使用时, 应当创建最子类的对象 原因是:
          1)、有可能父类不能创建对象(如被abstract 修饰的类, 也就是 抽象类) 。
          2)、对于子类的对象,可以使用更多的功能, 也可以被父类的引用指向。
      即:查阅父类功能,创建子类对象使用这些功能。

    三、其他关系:
        聚合: has a
          聚集:球队与队员
          组合:人与手脚



    四、子父类中变量的特点:

        当子类中出现了与父类中同名的成员变量时,我们使用 this关键字访问 子类的成员变量。
                            我们使用 super关键字访问 父类的成员变量。

        而此时,如果是父类引用指向的此子类对象的话, 通过对象名直接访问的此同名变量是父类的变量。
                                                      (这个就叫做 静态引用)

    五、子父类中函数的特点(重写):

        当子类中出现和父类一模一样的非静态函数时,此时我们子类对象调用该函数时(无论是什么引用指向它),会调用子类的函数。
          这个就是函数(方法)的另一个特点: 重写。
         注:重写的方法的权限不能小于父类的权限。

        此时子类对象无论是被父类引用还是被子类引用,我们调用这个函数时, 都是调用的子类的函数。
                                                (这个就叫做 多态 动态绑定 迟绑定)

    六、子父类中构造函数的特点:

        当对子类对象进行初始化的时候,父类的构造函数也会运行,因为jvm会在子类的构造函数的第一行有一条加上一条语句: super();
      super();会访问父类的空参构造函数。

        如果要访问指定的父类的构造函数,手动的使用super(实参);进行访问。   而且 super(实参);语句也要写在子类构造函数的第一行。


      总结子类的实例化过程:
                当子类的构造函数中没有super();语句时,会在构造函数第一句自动加上super();
                当父类中没有空参构造函数时,必须手动的使用super()语句进行指定的父类构造函数访问。

        同时,子类的构造函数第一句也可以手动的使用this语句来指定访问子类的其他构造函数,而子类所有的构造函数中必须都能直接访问或者互

      相找到访问父类的构造函数的接口。
        而且,子类中的每个构造如果出现了this() 语句,就不能出现super()语句。

    七、final关键字
        作用: 修饰符, 用于修饰类、 函数、 变量。

        1、被final修饰的类不能被继承。
          (避免被继承,被子类复写功能)
        2、被final修饰的函数不能被重写。
          (当类被继承后,保证父类中有的方法不能被更改时)

        3、被final修饰的变量的值不能被更改,既可以修饰成员变量、也可以修饰局部变量。
          (就是说一旦被初始化就不能被更改)

              作用:   在我们描述事物时,有的数据出现是固定的,但是我们为了提高阅读性,
                 就会给这个数据定义一个变量名。  for exanple 定义pai = 3.14125

        注:可以见得以上就是为一个常量命名, 在为常量命名时,要求所有字母使用大写,单词之间用_连接
          所以 上列为: PAI = 3.14125  。 又如 动物腿数: final int LEG_NUM = 4;

        注: 与static不冲突。



    八、abstract 关键字
        特点:
        1、抽象方法必须被放在抽象类中。

        2、抽象类和抽象方法要被 abstract 修饰。

        3、抽象类不能被 new 关键字创建对象, 因为抽象方法调用没有意义。

        4、抽象类中的抽象方法要被调用,必须要被子类对象将抽象方法全部重写过后,建立子类对象调用。
      如果只是覆盖了部分方法,那这还是个抽象类。

        注: 抽象方法要放在抽象类中, 但是抽象类中不是一定要有抽象方法(这样的话,就是不要该类建立对象)

        作用:
          1、给子类限定方法,强制子类实现这些功能。

    九、动态绑定和静态绑定的测试

        在父类中定义一个静态属性,静态方法,非静态属性,非静态方法,    在一个继承与其的子类中全部重写(就是重新定义它们),

    在测试类中创建一个子类对象,输出四个属性,  之后以一个父类引用指向对象,输出四个属性。

        通过测试法现: 只有非静态方法拥有多态、动态绑定、迟绑定。

                而其他的都是静态绑定。

    代码:

    class Futher
    {
      static String jtsx = "父类的静态属性";
      static void pr()
      {
        System.out.println("父类的静态方法");
      }

      String sx = "父类的属性";
      void prr()
      {
        System.out.println("父类的方法");
      }
    }

    class Son extends Futher
    {
      static String jtsx = "子类的静态属性";
      static void pr()
      {
        System.out.println("子类的静态方法");
      }

      String sx ="子类的属性";
      void prr()
      {
        System.out.println("子类的方法");
      }
    }

    public class TestExtends
    {
      public static void main(String []args)
      {
        Son s = new Son();
        s.pr();
        s.prr();
        System.out.println(s.jtsx);
        System.out.println(s.sx);

        Futher f = s;
        f.pr();
        f.prr();
        System.out.println(f.jtsx);
        System.out.println(f.sx);

      }
    }

    运行结果:


     

  • 相关阅读:
    Python环境管理(虚拟环境)/包管理工具
    Java面试题集锦
    python跟踪脚本运行过程(类似bash shell -x)
    【ClickHouse问题】更新表字段类型为Nullable(Int32)的列值,最终结果都是固定一个值:93147008???
    【ClickHouse】0:clickhouse学习4之表相关操作
    【ClickHouse】0:clickhouse学习3之时间日期函数
    【ClickHouse】0:clickhouse学习2之数据类型
    【ClickHouse】0:clickhouse学习1之数据引擎(数据库引擎,表引擎)
    【ClickHouse】7:clickhouse多实例安装
    【ClickHouse】6:clickhouse集群高可用
  • 原文地址:https://www.cnblogs.com/soficircle/p/6613815.html
Copyright © 2011-2022 走看看