• 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)

  • 相关阅读:
    Android学习笔记安卓基础知识
    V8编程1
    dfdf
    NodeJS沙箱
    CGI编程cgihtml库简析
    dsfdsf
    Android学习笔记获取屏幕大小
    Android学习笔记AndroidManifest.xml配置文件详解
    HTTP状态码解析
    简易c++版本日志库
  • 原文地址:https://www.cnblogs.com/zdyyy/p/11632804.html
Copyright © 2020-2023  润新知