zoukankan      html  css  js  c++  java
  • 大数据JAVA基础第十一天

    1.继承中构造方法的关系

    1.子类中所有的构造方法默认都会访问父类中空参数的构造方法,除非显式使用super/this调用了父类或者是本类的其他构造方法。

    2.在类中对本类或者是父类构造方法的调用,只能是在构造方法中,不能在实例方法中调用构造方法(更不能在类方法中调用构造方法),原因:

    • 实例方法被调用时,说明实例对象已经被创建完了,此时不能再使用this/super去初始化本实例或者是父类实例
    • 类方法是在本类加载的时候就已经加载的,这时实例对象还没有被创建出来,是不能使用this或者super的

    2.

    因为子类会继承父类中的数据(成员变量),可能还会使用父类的数据。

    所以,子类初始化之前,一定要先完成父类数据的初始化。

    换句话说,一个对象的创建意味着它的所有的父类都会被创建出来。

    3.子类构造方法的第一条语句:

    如果是this(...)表明调用的是本类的另一个构造方法,在另一个构造方法中还可以继续使用this(...)调用本类其他的构造方法,如果有多个构造方法的话,可以继续调用下去,但是不能递归调用,最终总会有一个构造方法,第一条语句不是this()了。

    这时,可以显式的调用父类的构造方法super(...);或者什么都不写,这时系统默认调用父类的空参构造方法。

    总之,当子类对象被创建的时候,总是会先调用父类的构造方法,直到Object这个最上层的对象被创建出来之后,其下的子类对象才会被创建出来。

    4.考察父类,子类代码块的执行顺序

    从这个案例中能看到有继承关系的类的实例初始化的过程,以及为什么在类方法中不能使用this或者是super关键字

    5.如果父类中没有空参构造方法,怎么办?

    1.子类可以通过super去显式调用父类其他的带参的构造方法

    2.子类可以通过this去调用本类的其他构造方法,但是本类其他构造也必须首先用super(...)访问了父类的带参构造(因为父类没有空参构造)

    6.总结

    如果父类没有空参构造,子类的构造方法中就必须显式调用父类带参构造super(...);

    一定要注意:

    super(…)或者this(…)必须出现在构造方法第一条语句上

    否则,就会有父类数据的多次初始化

    7.如果父类没有无参构造方法,那么子类的构造方法会出现什么现象呢?

           报错。

        如何解决呢?

           A:在父类中加一个无参构造方法

           B:通过使用super关键字去显示的调用父类的其他带参构造方法

           C:子类通过this去调用本类的其他构造方法

           子类中一定要有一个去访问了父类的构造方法,否则父类数据就没有初始化。

        注意事项:

           this(...)或者super(...)必须出现在第一条语句上。

           如果不是放在第一条语句上,就可能对父类的数据进行了多次初始化,所以必须放在第一条语句上。

    8.继承中成员方法的关系

    子父类中存在同名和不同名的成员方法

    结论

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

    首先在子类中找(是否子类进行了重写,或者是子类特有的方法)

    然后在父类中找(子类没重写,而是从父类继承而来的)

    9.继承中成员方法的关系:

           A:子类中的方法和父类中的方法声明不一样,这个太简单。

           B:子类中的方法和父类中的方法声明一样,这个该怎么?

               通过子类对象调用方法:

                  a:先找子类中,看有没有这个方法,有就使用

                  b:再看父类中,有没有这个方法,有就使用

                  c:如果没有就报错。

    10.方法重写概述

    方法重写概述

    • 子类中出现了和父类中一模一样的方法声明

    称为方法覆盖Override/重写OverWrite

    使用特点:

    • 如果方法名不同,就调用对应的方法
    • 如果方法名相同,最终使用的是子类自己的(使用子类的引用的时候,在多态情况下,使用父类的引用,则有可能调用的是父类的静态方法)

    方法重写的应用:

    • 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。
    • 方法的重写是多态实现的条件

    11.方法重写的注意事项

    • 父类中私有方法不能被重写,编译报错
    • 子类重写父类方法时,访问权限不能更低(后面讲),否则编译报错
    • 子类重写父类方法,返回值类型可以相同,或者是父类返回值类型的子类型
    • 父类的实例方法(非静态方法),子类不能重新定义为静态方法
    • 父类静态方法(类方法),子类也必须通过静态方法进行“重写”(虽然编译和使用都不报错,但其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中会讲解)
    • 子类中重写父类方法,按照重写的原则(访问权限不能变小,返回值同类或者子类,方法名相同,形参列表相同);否则子类中定义的同名方法就是方法的重载(继承而来的方法和子类定义的方法构成重载),重载就必须让参数列表不同。如果子类方法只与继承自父类的方法返回值不同,不能构成重载
    • 子类如果想重写父类的方法,最好是让方法的签名一模一样

    (重写方法的一个重要用途就是:父类的引用能够指向子类的方法,但是静态方法的“重写”,在多态中依然调用的是父类的方法,所以,从这个角度上来讲,子类对父类的静态方法的重写不能算是真正方法的重写)

    12.方法重写的注意事项

           A:父类中私有方法不能被重写

               因为父类私有方法子类根本就无法继承

           B:子类重写父类方法时,访问权限不能更低,最好就一致

           C:父类静态方法,子类也必须通过静态方法进行重写

               其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中讲解

    子类重写父类方法的时候,最好声明一模一样。

        否则同名的方法就是方法的重载了,就必须让形参列表不同

  • 相关阅读:
    ABAP ole方式对EXCEL进行操作
    ABAP 通过视图取数到内表函数
    ABAP 数值类型转换
    ABAP 供应商、工厂对应公里数维护
    deb包转换为rpm包格式
    Linux统计即时网速
    RedHat可用的几处软件源
    linux 技巧:使用 screen 管理你的远程会话
    国内常用Linux镜像站点
    telnet访问出现telnet:Unable to connect to remote host: No route to host
  • 原文地址:https://www.cnblogs.com/xiejiajun/p/6618796.html
Copyright © 2011-2022 走看看