• 《Java程序设计》第4周学习总结


    20175214 《Java程序设计》第4周学习总结


    本周学习内容总结

    1、根据《java2实用教程》和蓝墨云学习视频学习第四章;

    2、尝试将课本疑难内容用自己的话复述手打;

    3、输入课本代码并上传码云;

    4、学习使用IDEA调试代码。


    教材学习疑难内容总结

    • 5.1 子类和父类

      • 子类通过继承机制,继承父类的属性和行为并根据需要增加他自己的新的属性和行为。
        在类的声明中,使用关键字extends来定义一个类的子类,格式为
    class 子类名 extends 父类名{
    ……
    }
    
    • 子类只能有一个父类。若c为b的子类,b又是a的子类,则可称c是a的子孙类。
    • Java的类根据继承形成树状结构,根节点为object类,若无extends声名,则默认为object的子类。
    • 5.2 子类的继承性

      • 当子类和父类在同一个包中,子类可以继承父类中不是private访问权限的成员变量和方法作为自己的成员变量和方法,即继承public,protected和友好访问权限的成员变量和方法。
      • 当子类和父类不在同一个包中,子类只能继承public,protected访问权限的成员变量和方法。
      • Protected的进一步说明:假设b是a的子类,若c类用b类创建了一个对象,则对于该对象访问protected权限的成员变量和方法有以下判定:
      • 子类b自己声名的:只需和b在一个包内即可访问;
      • 子类b继承自父类a的:需上溯祖先类,即需与祖先类在同一个包中才可访问。
    • 5.3 子类与对象

      • 当用子类创建对象时,父类中的成员变量也将被分配内存空间,包括未被子类继承的部分。故而private即使未被子类继承,却仍可通过从父类中继承的操作private变量的方法操作private的变量。
    • 5.4 成员变量的隐藏和方法重写

      • 成员变量的隐藏:当声名一个与从父类继承的同名的成员变量时(类型任意),子类会隐藏所继承的成员变量,对这部分变量的操作遵循以下原则:
      • 子类自己编写的方法操作的一定是子类自己声名的那个成员变量;
      • 继承自父类的方法操作的一定是被隐藏的继承自父类的成员变量。
      • 方法重写:如果子类有权限继承某个方法,则子类可以通过方法重写原则重写这个方法,方法重写即定义一个与父类方法拥有相同的名字,方法类型(或其子类型),参数个数,参数的类型的方法,当这样的方法被定义,则原父类方法被隐藏,且被调用的方法默认为重写方法。
      • 重写方法拥有操作继承的成员变量,调用继承方法,操作子类变量及方法等权限,但无法操作被隐藏的成员变量和方法。
      • 若定义的方法增加了参数,则视为方法重载,而非方法重写。
      • 方法重写不允许降低访问权限,但可提高访问权限(访问权限从高到低依次为public,protected,友好,private)。
    • 5.5 super关键字

      • 被隐藏的成员变量及方法可通过super关键字调用,格式为super . x、super . y();
      • 当调用子类的构造方法时,默认调用父类的某个构造方法。由于子类不继承父类的构造方法,故而子类在其构造方法中需要用super来调用父类的构造方法,且Super语句应在构造方法的第一行。
      • 若无声名super,则默认为super(),即调用父类中无参数的构造方法。
      • 当父类定义了多个构造方法时,应有一个无参数构造方法,以防止子类省略super时出错。
    • 5.6 final关键词

      • final关键词可以修饰类、成员变量和方法中的局部变量。
      • final类无法被继承,声名格式为
    final class A{
    ……
    }
    
    • final方法无法被重写,即不允许子类隐藏所有可被继承的final方法,不允许做任何篡改。

    • 被final修饰的成员变量和局部变量等同于常量,常量在运行期间不允许再发生变化,没有默认值,故而必须在声名final变量时就指定其值。

    • 5.7 上转型变量

      • B是A的子类或间接子类,当我们用子类B创建一个对象,并把这个对象的引用放到类A声明的对象中时,如
    A a;
    B b=new B();
    a=b;
    

    那么,就称对象a是子类对象b的上转型对象。

    • 上转型对象不能操作子类声明定义的成员变量,不能使用子类声明定义的方法。

    • 上转型对象可以代替子类对象去调用子类重写的实例方法。如果子类重写的方法是实例方法,那么上转型对象调用重写的方法时,就是通知对应的子类对象去调用这些方法。因此,如果子类重写了父类的某个实例方法后,子类对象的上转型对象调用这个方法时,一定是调用了这个重写的方法。

    • 上转型对象可以调用子类继承的成员变量和隐藏的成员变量。

    • 若将对象的上转型对象再强制转换到一个子类对象,这时该子类对象又具备了子类的所有属性和功能。

    • 5.8 abstract类和abstract方法

      • abstract类:表达概念而无法构造出实体的类,且不能生成对象,通常被继承。abstract类声名格式为
    abstract class A{
                    …
    }
    
    • abstract方法:表达概念而无法实现具体代码的方法。abstract方法声名形如
    abstract int min(int x,int y);
    
    • abstract方法只允许声名,不允许实现,即abstract方法没有方法体,不允许使用static修饰abstract方法,即abstract方法必须是实例方法。

    • abstract类中可以没有abstract方法,也可以同时有abstract方法和普通方法,但非abstract类中不可以有abstract方法。

    • abstract类不能被实例化,所以无法对抽象类进行new。

    • 继承自abstract类的非abstract类子类必须重写以实现父类中的抽象方法,若子类也是abstract类,则可重写也可继承。

    • abstract不和可以和final一同使用:被final修饰后的类不能出现子类,而abstract的类需要子类来重写方法(不然毫无意义)。

    • abstract不和可以和private一同使用: 当用private修饰抽象函数的时候,子类继承会无法重写父类的抽象方法(private不被子类继承)。

    • 可以使用abstract类声名对象,尽管不能new,但可成为其子类的上转型对象,则该对象可以继承父类的abstract方法。

    • 5.10 面对抽象编程

      • abstract类只关心操作,而不关心这些操作具体的实现细节,由此可以分割设计者和具体实现者的职能,即避免设计者把大量的时间和精力花费在具体的算法上。
      • 在设计一个程序时,可以通过在abstract类中声明若干个abstract方法,表明这些方法在整个系统设计中的重要性,方法体的内容细节由它的非abstract子类去完成。
      • 使用多态进行程序设计的核心技术之一是使用上转型对象,即将abstract类声明的对象作为其子类对象的上转型对象,那么这个上转型对象就可以调用子类重写的方法。
      • 所谓面向抽象编程,是指当设计某种重要的类时,不让该类面向具体的类,而是面向抽象类,即所设计类中的重要数据是抽象类声明的对象,而不是具体类的声明的对象。
    • 5.11 开-闭原则(参考博客https://blog.csdn.net/m0_37450089/article/details/81607492)

      • 定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。
      • 在软件的生命周期内,因为变化、升级和维护等原因需要对软件原有代码进行修改时,可能会给旧代码中引入错误,也可能会使我们不得不对整个功能进行重构,并且需要原有代码经过重新测试。
      • 开闭原则即提倡用抽象构建框架,用实现扩展细节。因为抽象灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节,我们用从抽象派生的实现类来进行扩展,当软件需要发生变化时,我们只需要根据需求重新派生一个实现类来扩展就可以了。
      • 实际上,绝对封闭的系统是不存在的,无论模块是怎么封闭,到最后,总还是有一些无法封闭的变化,而我们的思路就是:既然不能做到完全封闭,那我们就应该对那些变化封闭,那些变化隔离做出选择。我们做出选择,然后将那些无法封闭的变化抽象出来,进行隔离,允许扩展,尽可能的减少系统的开发。当系统变化来临时,我们要及时的做出反应。
      • 当变化到来时,我们首先需要做的不是修改代码,而使尽可能的将变化抽象出来进行隔离,然后进行扩展。面对需求的变化,对程序修改应该是尽可能的通过添加代码来实现,而不是通过修改代码来实现。

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


    代码托管


    即便不高谈理想,也要心存信仰。
  • 相关阅读:
    代理(reGeorg)
    弱口令爆破技巧
    无法解析@NotBlank
    LC 1723. Find Minimum Time to Finish All Jobs (dp+二分)
    帝国cms 联合多张表查询
    php 根据白名单替换字符转中的链接 封装的函数
    php 正则匹配域名后的整个链接和只匹配域名
    JVM系列(一):垃圾回收之MinorGC,MajorGC和FullGC的区别
    spring事务的执行原理
    java基础系列(八):Semphore,CountDownLatch和CyclicBarrier的使用
  • 原文地址:https://www.cnblogs.com/fzlzc/p/10581084.html
Copyright © 2020-2023  润新知