20182303 2019-2020-1 《数据结构与面向对象程序设计》第5周学习总结

教材学习内容总结

继承:从已知类派生一个新类的过程

  • 子类和父类(is-a关系):子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
    注意: Java 不支持多继承,但支持多重继承。

  • 特性:

    • 子类拥有父类非private的属性、方法。
    • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
    • 子类可以用自己的方式实现父类的方法。
    • 所有的类都是继承于java.lang.Object
  • 关键词

    • extends:只能继承一个类
      class 父类 {}
      class 子类 extends 父类 {}
      
    • implements:可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。
      public interface A {
      public void eat();
      public void sleep();
      }
      
      public interface B {
      public void show();
      }
      
      public class C implements A,B {
      }
      
    • super&this
      • super:引用当前对象的父类。
      • this:指向自己的引用。
    • final:可用来限制继承。
      • 声明类:final class 类名 {//类体}
      • 声明方法:
        修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
  • 方法重写(override)

    • 参数列表必须完全与被重写方法的相同。
    • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected
    • 父类的成员方法只能被它的子类重写。
    • 声明为final的方法不能被重写。
    • 声明为static的方法不能被重写,但是能够被再次声明。
    • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为privatefinal的方法。
    • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为publicprotected的非final方法。
    • 构造方法不能被重写。
    • 如果不能继承一个方法,则不能重写这个方法。
    • 当需要在子类中调用父类的被重写方法时,要使用super关键字。
  • 抽象类

    • 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。
    • 只有抽象类的非抽象子类可以创建对象。
    • 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
    • 抽象类中的抽象方法只是声明,不包含方法体,不给出方法的具体实现就是方法的具体功能。
    • 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。

教材学习中的问题和解决过程

  • 问题1:方法重写&方法重载
  • 问题1解决方案
    方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。
    (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
    (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
    (3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

  • 问题2:对于protected理解含糊。
  • 问题2解决方案
  1. 父类的protected成员是包内可见的,并且对子类可见;
  2. 若子类与父类不在同一包中,那么在子类中,子类实例可以访问其从父类继承而来的protected方法,而不能访问父类实例的protected方法。
    注:protected不能用于修饰外部类。

代码调试中的问题和解决过程

  • 问题1:敲代码过程中出现最初设想不到位,导致途中需要反复修改的问题。
  • 问题1解决方案:在上手敲代码前先明确需求以及自己所需要的类,方法以及变量,先保证逻辑清楚,再写成代码。

代码托管

上周考试错题总结

  1. The instruction super(); does which of the following?
    A .calls the method super as defined in the current class
    B .calls the method super as defined in the current class'parent class
    C .calls the method super as defined in java.lang
    D .calls the constructor as defined in the current class
    E .calls the constructor as defined in the current class'parent class
    正确答案: E 我的答案: B
    解析 :super表示对当前类的父类的调用。
  2. Which of the following is not a method of the Object class?
    A .clone
    B .compareTo
    C .equals
    D .toString
    E .all of the above are methods of the Object class
    正确答案: B 我的答案: E
    解析:clone()实现对象中各个属性的复制。toString()将对象转换为字符串。equals() 方法用于将字符串与指定的对象比较。compareTo()方法用于两个相同数据类型的比较,是接口java.lang.Comparable<T>中的方法。
  3. Two children of the same parent class are known as
    A .aliases
    B .relatives
    C .clones
    D .brothers
    E .siblings
    正确答案: E 我的答案: D
    解析:siblings:同胞。
  4. If you instantiate an Abstract class, the class or object you wind up with
    A .is also an Abstract class
    B .is a normal class
    C .is an Interface
    D .is a reference to an Object
    E .can't exist you cannot instantiate an Abstract class
    正确答案: E 我的答案: A
    解析:抽象类不能被实例化,但是抽象类和接口可以被扩展。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行 30篇 400小时
第一周 254/254 2/2 21/21 开始编写简单的程序
第二周 132/386 1/3 26/47 学会使用Scanner类
第三周 632/1018 2/5 21/68 学会使用部分常用类
第四周 663/1681 2/7 27/95 junit测试和编写类
第五周 1407/3088 2/9 30/125 继承以及继承相关类与关键词
  • 计划学习时间:25小时

  • 实际学习时间:30小时

参考资料

Java 重写(Override)与重载(Overload)

posted @ 2019-10-07 23:03  zdyyy  阅读(200)  评论(0编辑  收藏  举报