20175316盛茂淞 2018-2019-2 《Java程序设计》第5周学习总结

20175316盛茂淞 2018-2019-2 《Java程序设计》第5周学习总结

教材学习内容总结

第六章 接口与实现、

何谓接口

  • 接口:书上没有明确地给出接口的定义,我理解的接口就是一段程序中可能有很多类会有共同的行为,但这些类本身并不具有任何关系,如果使用继承的话程序架构会不合理,所以使用统一的接口表示这些类具有共同的行为
    interface
    可定义行为,例如:
public interface Swimmer{
        public abstract void swim();
    }

implements
类要操作接口,必须使用 implements 关键字,例如:

public abstract class Fish implements Swimmer{
}
  • 操作某接口时,对接口中定义的方法有两种处理方式:

    1. 操作接口中定义的方法
    2. 再度将该方法标示为 abstract
      继承与操作接口的区别:继承会有“是一种”关系,操作接口表示“拥有行为”,但不会有“是一种”的关系
  • 多态语法合法性判断:判断等号右边是不是拥有等号左边的行为,即等号右边的对象是不是操作了等号左边的接口,以下这个例子就可以通过编译:
    Swimer swimmer = new Shark();//因为 Fish 操作了 Swimmer 接口,即 Fish 拥有了 Swimmer 行为。Shark 继承 Fish ,所以Shark 拥有 Swimmer 行为
  • 扮演语法:会操作 Swimmer 接口的不一定继承Fish,加上扮演语法即可通过编译,例如:
Swimmer swimmer = new Shark();
Fish fish = (Fish)swimmer;

以下的例子将会抛出 ClassCastException 错误:

Swimmer swimmer = new Human();//将 swimmer 参考到 Human实例
Shark shark = (Shark)swimmer;//让 swimmer 扮演鲨鱼

已经将 swimmer 参考到 Human 实例了,再让他扮演鲨鱼就会出现错误

  • 解决需求变更问题:我们可以定义一些拥有不同行为的接口,定义一些类作为父类,当增加新的需求的时候,可以操作接口,代表拥有接口的行为,也
    可以继承父类,代表这个新的类“是一种”父类,原有的程序无需修改,只针对新的需求撰写程序即可
  • 在java中,类可以操作两个以上的接口,也就是拥有两种以上的行为
  • 在java中,接口可以继承自另一个接口,也就是继承父接口行为,再在子接口中额外定义行为,例如:
public interface Diver extends Swimmer{  //接口 Diver 继承了接口 Swimmer
    public abstract void dive();
}

接口语法细节

  • 在java中,可使用 interface 定义抽象的 行为与外观,如接口中的方法可声明为 public abstract ,例如:
public interface Swimmer{
    public abstract void swim();
}
  • 接口中的方法没有操作的时候,一定要是公开抽象,可以省略 public abstract ,例如:
  public interface Swimmer{
    void swim();  //此处默认是 public abstract
}
  • 由于默认一定是 public ,在类操作接口的时候也要撰写 public
interface Action{
    void execute();
}

class Some implements Action{
    void execute(){
    //Some 类在操作 execute() 方法时,没有撰写 public ,因此默认为是包权限,这等于是将 Action 中的 public 方法缩小为包权限,所以编译失败
    //将 Some 类的 execut() 设为public 才可通过编译
    System.out.println("做一些服务");
    }
}

在 interface 中,只能定义 public static final的枚举常数 ,例如:

public interface Action{
    public static final int STOP = 0;
}

如下撰写程序时,编译程序会自动展开为public static final

public interface Action{
    int STOP = 0;
}
  • 在接口中枚举常数,一定要使用 = 指定值,否则编译错误
  • 接口可以继承别的接口,可以同时继承两个以上的接口,使用 extends 关键字 ,代表了继承父接口的行为,例:
interface Action{
    void executes();
}
// 定义 Acton 为父接口
interface Some extends Action{
    void doSome();
}
interface Other extends Action{
    void doOther();
}
// Some 和 Other 接口继承 Action 接口
public class Service implements Some,Other{
// Service 继承 Some 和 Other 接口
    @Override
    public void execute(){
        System.out.println("execute()");
    }
// Service 重新定义 execute() 方法
    @Override
    public void doSome{
        System.out.println("doSome()");
    }
    @Override
    public void doOther{
        System.out.println("doOther()");
    }
// Service 重新定义 doSome 和 doOther 方法
}

匿名内部类

  • 某些子类或接口操作类只使用一次,不需要为这些类定义名称,这时可使用匿名内部类
  • 语法:
new 父类()|接口(){
    //类本体操作
};
  • JDK8 之前,若要在匿名内部类中存取局部变量,则该局部变量必须是 final ,否则会发生编译错误
final int[] numbers = {10,20};

enum

enum 可定义枚举常数,但实际上 enum 定义了特殊的类,继承自 java。lang.Enum ,编译过后会产生 Action.class 文件,可用这个 Action 声明类型,例如:

public class Game {
    public static void main(String[] args){
        play(Action.RIGHT);
        play(Action.UP);
    }

    public static void play(Action action){
        switch(action){
            case STOP:
                out.println("播放停止动画");
                break;
            case RIGHT:
                out.println("播放向右动画");
                break;
            case LEFT:
                out.println("播放向左动画");
                break;
            case UP:
                out.println("播放向上动画");
                break;
            case DOWN:
                out.println("播放向下动画");
                break;
        }
    }
}
  • enum中列举的常熟,实际上是 public static final ,且为枚举类型实例,因为构造函数权限设定为 private ,只有类中才可以实例化

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

问题一

Java中的继承和C语言中调用函数有何区别?

  • Answer
    Java语言与C语言本身就是两种不同思维的语言。C语言是面向过程的语言,就是我们要干一件事情,那么一步一步逐次来做,直到完成,其中可能就要调用一些函数,被调用的函数也是过程执>行的。但是Java程序的开发思路是面向对象的,它是有一个类,这个类有属性,有方法。我们要干一件事的时候,就通过该类所定义的或者说是具体化的对象(Object)来调用自己的方法来完成,这里所说的方法,也可以理解为是一个函数(类似于C语言中的),但是只不过这个方法现在是属于这个类的,属于这个对象的,是有“主人”的,只有通过它的“主人”才能调用它。而面向对象的Java有一个特点就是继承,当某一个类A继承了类B那么类A就可以使用类B的方法了,因为A继承了B,同样A的对象也可以使用B的方法了。

问题二

继承类和接口有何区别?

  • Answer:
    1.不同的修饰符修饰(interface),(extends)
    2.在面向对象编程中可以有多继承!但是只支持接口的多继承,不支持“继承”的多继承。而继承在java中具有单根性,子类只能继承一个父类
    3.在接口中只能定义全局常量,和抽象方法,而在继承中可以定义属性方法,变量,常量等。
    4.某个接口被类实现时,在类中一定要实现接口中的抽象方法,而继承想调用那个方法就调用那个方法,毫无压力。
    举个有趣的例子:
    当使用继承的时候,主要是为了不必重新开发,并且在不必了解实现细节的情况下拥有了父类我所需要的特征。
    但是很多时候,一个子类并不需要父类的所有特征,它可能只是需要其中的某些特征,但是由于通过继承,父类所有的特征都有了,需要的和不需要的特征同时具备了。而那些子类实际上不需要用到的,有时候甚至是极力避免使用的特征也可以随便使用,这就是继承的副作用。特别是允许多重继承的Java语言中,很容易引起不容易发现的错误。所以在java的语言中,会创造出各种规定来限制子类使用父类中的某些方法。
    如果狗的主人只是希望狗能爬比较低的树,但是不希望它继承尾巴可以倒挂在树上,像猴子那样可以飞檐走壁,以免主人管不住它。那么狗的主人肯定不会要一只猴子继承的狗。
    设计模式更多的强调面向接口。猴子有两个接口,一个是爬树,一个是尾巴倒挂。我现在只需要我的狗爬树,但是不要它尾巴倒挂,那么我只要我的狗实现爬树的接口就行了。同时不会带来像继承猴子来带来的尾巴倒挂的副作用。这就是接口的好处。
    Java技术发展也有好多年了,一个很明显的趋势就是继承的使用越来越少,而接口的使用越来越广泛了。其实只要稍微比较一下JDK里面那些最早就有的类库和最近才加进去的类库,就可以很明显的感觉到java技术领域的编程风格的变迁,由大量的继承到几乎无处不用的面向接口编程。
    接口不是替代继承。比如说我现在就是要我的动物去爬树,我根本就不需要知道到底是狗去爬树还是猴子。我提取出“能爬树”的动物去爬。这个能爬树的动物既可以是猴子,也可以是狗。这样不是很灵活吗?

本周感悟

  • 经过了本章学习,我感觉自己的比上周又进步了很多,而且几周时间,在练习的过程中我已经敲了将近两千行代码了,就像老师说的那样,通过敲代码的练习,真真切切的可以感受到自己对代码的理解一直在上升,一开始我会抱有疑问:敲代码不就是可以记忆的更好么?其实不止如此,敲代码的过程也要是一个思考的过程,我们敲代码不是单纯的敲键盘,脑袋也要进行思考,出现了问题要去发现问题解决问题,没有问题也要去想想这段代码虽然运行成功了,但是合理么?如果合理,还有可以改进的地方么?带着思考去学习,进步才会越来越大,就像老师给的那道思考题——正方形可以继承长方形么?如果我们单纯的敲代码,我们可以敲出一个运行成功的代码,结果也是我们想的,但是,正确答案是不可以的,那么正确答案就需要我们自己思考,设计一个验证的方案,不光这道思考题如此,我们以后接触的代码会越来越复杂,很多地方无论逻辑上还是规则上都需要进行思考。
  • 本周学习,我最大的收获就是对代码思考的越来越多了,不只是在敲代码了。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90
第五周 300/1600 2/10 30/120

原文地址:https://www.cnblogs.com/sms369/p/10634035.html

时间: 2024-10-08 21:59:38

20175316盛茂淞 2018-2019-2 《Java程序设计》第5周学习总结的相关文章

20175316盛茂淞 2018-2019-2 《Java程序设计》第8周学习总结

20175316盛茂淞 2018-2019-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 泛型 -- 主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构 -- 泛型类声明 可以使用class 名称<泛型列表>声明一个类,为了和普通的类有所区别,这样声明的类称作泛型类,没有指定E是何种类型的数据,它可以是任何对象或接口,但不能是基本类型数据 -- 使用泛型类声明对象 泛型类声明和创建对象时,类名后多了一对"<>"

20175316盛茂淞与20175329许钰玮结队合作

20175316盛茂淞与20175329许钰玮结队合作 一.团队合作意义 团队合作指的是一群有能力,有信念的人在特定的团队中,为了一个共同的目标相互支持合作奋斗的过程.它可以调动团队成员的所有资源和才智,并且会自动地驱除所有不和谐和不公正现象,同时会给予那些诚心.大公无私的奉献者适当的回[1]报.如果团队合作是出于自觉自愿时,它必将会产生一股强大而且持久的力量. 二.团队合作的表现力 (1)成员密切合作,配合默契,共同决策和与他人协商. (2)决策之前听取相关意见,把手头的任务和别人的意见联系起

2019-2020-2 20175316盛茂淞《网络对抗技术》Exp3 免杀原理与实践

2019-2020-2 20175316盛茂淞<网络对抗技术>Exp3 免杀原理与实践 一.实验目标 熟悉后门的概念 使用netcat实现win,linux之间的后门连接 掌握meterpreter的应用 了解MSF POST 模块的应用 学会win,linux的后门启动方式 二.基础问题回答 1.杀软是如何检测出恶意代码的? 基于特征码的检测(需要定期更新病毒库) 启发式恶意软件检测(实时监控,开销较大) 基于行为的恶意软件检测(如API监控) 2.免杀是做什么? 通过伪装,加解密,对she

20155336 2016-2017-2《JAVA程序设计》第二周学习总结

20155336 2016-2017-2 <JAVA 程序设计>第二周学习总结 教材学习内容 1: GIT版本检测 2: JAVA中基本类型 整数 字节 浮点数 字符 布尔(▲) 通过API可以得知各个类型可存储的数值范围 public class Range {public static void main(String[] args){ //byte.short.int.long的范围 System.out.printf("%d~%d%n", Byte.MIN_VALU

20145201 《Java程序设计》第一周学习总结

# 20145201 <Java程序设计>第一周学习总结 ## 教材学习内容总结 万事开头难,终于开始学习了Java.寒假的时候看到老师的要求确实有点慌,但是这周翻开书,从书本知识第一行学起,发现并不是自己想想中那么难,只要一步一个脚印,每周有自己的计划,并按照计划按部就班的完成,最后一定会拥有自己的小成果的. 1.1Java不只是语言 Java经过多年的版本更新后,最新的版本是Java SE8. 在java发展的过程中,它的应用领域越来越广,根据不同级别的应用开发区分了不同的应用版本,最终j

20145326蔡馨熠《Java程序设计》第一周学习总结

20145326蔡馨熠 <Java程序设计>第一周学习总结 教材学习内容总结 转眼间新的一学期终于开始了!为什么我这么期待呢?因为这学期可以上娄嘉鹏老师的java程序设计课,我不是什么电脑天才,之前c语言学得也不是特别好.可我就是对hdl和java特别感兴趣(之前在我的问卷调查报告里面提到过),并且寒假的时候在家里也预习了一部分java知识.第一周要求学习两个章节并作心得体会,虽然我早已看过前两章的知识,不过为了进一步巩固,我还是用了星期六一天的时间把第一章和第二章的知识从头到尾仔仔细细的看了

20145224-陈颢文 《Java程序设计》第一周学习总结

20145224 <Java程序设计>第一周学习总结 教材学习内容总结 通过第一周的学习让我对Java有了个初步的了解,知道了Java分为Java SE.Java EE.Java ME三大平台,其中Java SE是基础.Java的一大特点是它可以跨平台,而JVM对Java的跨平台提供了支持,它就类似于一个虚拟机,只要在当前平台安装了相应的JVM,Java程序就有了可以在此平台上运行的基础啦.JRE是Java的执行环境,在安装了JRE的计算机上就可以运行Java的程序了,当然光是可以跑代码对于程

20155335 俞昆 2016-2017-2 《Java程序设计》第九周学习总结

学号 2016-2017-2 <Java程序设计>第九周学习总结 ##JDBC入门 在正式介绍JDBC前,已知JDBC是用来执行SQL的解决方案,开发人员使用JDBC的标准接口,开发人员不需接触底层数据库驱动程序的差异性. 本章,我们需要了解JDBC与API使用和概念,我们先要认识应用程序如何与数据库进行沟通,数据库本身是一种独立运行的应用程旭,程序员撰写的应用程序是利用通信协议对数据库进行指令交换,以进行数据的增加删除以及查找. 通常应用程序会利用一组专门与数据库进行通信协议的链接库,以简化

20145326《Java程序设计》第二周学习总结

20145326<Java程序设计>第二周学习总结 教材学习内容总结 本周学习教材第三章,本章主要讲述了java语言中的一些基础语法,java是个支持面向对象的程序语言,但在正式进入面向对象支持语法的探讨前,对于类型.变量.运算符.流程控制等,这些各种程序语言都会有的基本语法元素,还是要有一定的基础.虽然各种程序语言都有这些基本语法元素,但千万别因此而轻忽它们,因为各种程序语言都有其诞生的宗旨与演化过程,对这些基本语法元素,也就会有其独有的特性. 1. 类型 在java的世界中,并非每个东西都