zoukankan      html  css  js  c++  java
  • 21045234黄斐《java程序设计》第四周

    教材学习内容总结

    第六章部分 - 继承与多态

    何谓继承

    • 继承
      面向对象中,子类继承父类,避免重复的行为定义。一般来说,父类的父类也称父类,且同一个子类只允许拥有一个父类,而同一个父类则可以拥有多个子类。继承的出现提高了代码的复用性,也让类与类之间产生了关系,提供了多态的前提。

    • 在Java中,使用关键字extends来表示类与类之间的继承关系:public class SwordsMan extendsRole 中类SwordsMan继承了类Role,类SwordsMan扩充了类Role的行为,也就是类Role中有定义的程序代码,类SwordsMan因为继承而都拥有了。

    • IS-A
    • IS-A译为“是一种”,子类与父类就是一种“IS-A”的关系。
      • 注意建立对象时候的顺序,应该遵守从右往左读的原则(这样才符合IS-A原则):

        Role role1 = new SwordsMan();
        Role role2 = new Magician();
      • 赋值时:如果用父类建立了一个对象实例,那么要将这个对象赋给它的子类时,需要进行强制转:

        Role role1 = new SwordsMan();
        SowrdsMan swordsMan = (SwordsMan) role1;
      • 我们还可以使用instanceof来判断IS-A关系:

        System.out.println(SwordsMan instanceof Role);     \输出true
        System.out.println(Role instanceof SwordsMan);     \输出false
    • 多态
      按照字面的意思上说,就是多种状态。指的是使用一个接口,操作多种类型的数据。

    • 覆盖(Override)
      • 一般来说,当子类和父类具有一模一样的方法时,会出现覆盖操作,也就是重新定义行为。因为子类一般来说都有其独特的功能,父类一般的函数定义不能满足每个不同角色的需要。
      • 函数的覆盖也更好的体现了面向对象的多态性。
      • 要将覆盖(Override)与重载(Overload)区分开:覆盖除了保留了原有的相同方法部署,但执行内同不同,方法是一样的;而重载指的是函数名相同,但调用变量的类型个数都不同,是不同的函数,并不存在某个函数把某个函数覆盖的情况。
      • 注意:
    •       在重新定义父类中的某个方法时,除了可以定义权限较大的关键字外,子类必须撰写与父类方法中相同的签 署。如果函数名打错了,那就不是重新定义了,而是子类新定义了一个方法函数。
      1. 通常,我们会在子类中重新定义行为前加上@Override,用以判断该方法是否真的重新定义了父类中的一个方法。
      2. 重新定义方法时,对于父类中的方法权限,只能扩大不能缩小。
    • 抽象方法、抽象类
      • abstract:对于一个类的方法区块中实际上没有撰写任何程序代码,为了避免不被漏掉,可以使用abstract标示该方法为抽象方法。该方法不用撰写{}区块,直接“;”结束即可。
      • 注意:
      1. Java中有抽象方法的类一定是抽象类,但抽象类中的方法不一定都是抽象方法。
      2. 象类,但抽象类中的方法不一定都是抽象方法
    • Square(正方形)类继承Rectangle(矩形)类合适吗?
      合适,因为正方形是一种(IS-A)矩形,它拥有矩形的一般特点。

    继承语法细节

    1. protected成员:被声明为protected的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。
    2. 重新定义的细节:在调用方法前加上super关键字,重新定义父类中的方法在子类中权限只能扩大不能缩小,在jdk5之后返回类型也可以是父类中方法返回类型的子类。
    3. 构造函数。
    4. 垃圾收集:对于不再有用的对象,JVM的垃圾收集器会将其释放。不同的需求会有不同的垃圾收集算法。
    5. 抽象类:如果还有些方面没有确定,可以调用抽象方法,等到平台确定后,再对代码进行符合这个平台的完善就行。
      public class Role1{
      private String name;
      private int level;
      private int blood;

    第七章部分 - 接口与多态

    何谓接口

    • 接口定义行为
      • 对于定义行为,Java中可以使用interface关键字定义。
      • 是一种特殊的类,里面全部是由全局常量(static final)和公共的抽象方法所组成。
      • 接口的数据成员,只允许被public, static, final修饰。
        接口的方法成员,只允许被public, abstract修饰。
      • 接口中的数据成员都为static final类型,必须进行初始化,且接口的数据成员的值不能被修改,允许省略static, final关键字。
      • 接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字。
      • 对于接口多态语法的判断,方式是“右边是不是拥有左边的行为”,或者“右边对象是不是操作了左边接口”。
    • implements
      • 接口不能用new运算符直接产生对象,必须利用其特性设计新的类,再用新类来创建对象与抽象类一样,接口要使用也必须通过子类,子类通过implements关键字实现接口。
      • 操作某接口时,对接口中定义的方法有2种处理方式,一是操作接口中定义的方法,二是再度将该方法标示为abstract.
      • 实现格式:

        class 子类名称 implements 接口A,接口B,….{
        //子类成员声明
        }
    • 解决需求变更
      需求会不断变化,架构也有可能因此而修改。好的架构在修改时,其实也不会全部的程序代码都被牵动,这就是设计的重要性。一般来说,会确定一个程序的需求边界,然后设计好架构,接着就是不断朝着这个方向进行优化。

    接口语法细节

    • 接口中的public abstract可以省略,但要注意:接口中的方法必须是“抽象方法”,不能有方法体,允许省略public及abstract关键字。
    • 接口中可以使用extends继承接口,并且可以继承多个接口
      • 接口不能继承一个抽象类,却可以通过extends同时继承于多个接口。
      • 例如:interface A extends B, C{……}
    • 匿名内部类
      • 匿名内部类也就是没有名字的内部类。正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写,但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口。
      • JDK8 前在匿名内部类中访问局部变量,则该局部变量必须为final
    • enum
      • 可以用于定义常量,例如:

        public enum Color {  
        RED, GREEN, BLANK, YELLOW  
        } 
      • 可以用于switch语句,将enum定义的枚举常数用以switch判断选择。

    考试错题解析

    1. 填空:Linux Bash中,(grep )命令可以进行全文搜索。
    4. 填空:System.out.println(“”+52+25);的结果是(5225)
    5. 填空:System.out.println(52+25+””);的结果是(77)
    8. CH04 填空:p86 命令行下编译Guess.java的命令是(javac -d . Guess.java)
    9. CH04 判断:p86 Guess.java中guess的值无法输入12。(X)
    11. CH04 判断: Java中,=与==并没有在基本类型和类类型的不同。(OK)
    14. CH04 填空:Java中的多维数组都是由(一维数组组成)。
    16. CH04 填空:p104 CopyArray.java 中修改int [] scores2 = Arrays.copyOf(scores1, scores1.length,使得输出的第二行只有前五个元素,修改后的代码为(int [] scores2 = Arrays.copyOf(scores1, scores1.length/2) 或int [] scores2 = Arrays.copyOf(scores1, 5) )
    24. CH05 判断:Java中类总会有默认构造方法。(X)
    29. CH05 填空:Java中成员方法中引用成员变量,要使用(this)关键字。
    32. CH05 判断:Java中方法内可以定义类。(OK)

    学习进度表

  • 相关阅读:
    进程池,线程池,协程,gevent模块,协程实现单线程服务端与多线程客户端通信,IO模型
    线程相关 GIL queue event 死锁与递归锁 信号量l
    生产者消费者模型 线程相关
    进程的开启方式 进程的join方法 进程间的内存隔离 其他相关方法 守护进程 互斥锁
    udp协议 及相关 利用tcp上传文件 socketserver服务
    socket套接字 tcp协议下的粘包处理
    常用模块的完善 random shutil shevle 三流 logging
    day 29 元类
    Django入门
    MySQL多表查询
  • 原文地址:https://www.cnblogs.com/taigenzhenjun/p/6581948.html
Copyright © 2011-2022 走看看