20155208徐子涵 2016-2017-2 《Java程序设计》第4周学习总结
20155208徐子涵 2016-2017-2 《Java程序设计》第4周学习总结
教材学习内容总结
第六章 继承与多态
继承
继承作为面向对象的第二大特征,基本上就是避免多个类间重复定义共同行为。即当多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承单独的那个类即可。从而简化了程序,并且减少了冲突错误。 在Java中,通过extends关键字让类与类之间产生继承关系。子类可以直接访问父类中的非私有的属性和行为,而对于private成员也会被继承,只不过子类无法直接存取,必须通过父类提供的方法来存取 继承的特点:继承的出现提高了代码的复用性,也让类与类之间产生了关系,提供了多态的前提。
在Java中,继承时使用extends关键字,private成员也会被继承,只不过子类无法直接存取,必须通过父类提供的方法来存取(如果父类愿意提供访问方法的话)。如下面这个例子:
public class RPG1
{
public static void main(String[] args)
{
demoSwordsMan1();
demoMagician1();
}
static void demoSwordsMan1()
{
SwordsMan1 swordsMan1 = new SwordsMan1();
swordsMan1.setName("Justin");
swordsMan1.setLevel(1);
swordsMan1.setBlood(200);
System.out.printf("剑士:(%s,%d,%d)%n",swordsMan1.getName(),swordsMan1.getLevel(),swordsMan1.getBlood());
}
static void demoMagician1()
{
Magician1 magician1 = new Magician1();
magician1.setName("Monica");
magician1.setLevel(1);
magician1.setBlood(100);
System.out.printf("魔法师:(%s,%d,%d)%n",magician1.getName(),magician1.getLevel(),magician1.getBlood());
}
}
继承的好处:若你要将name、level、blood改为其他名称,那就只要修改Role.java就可以了,只要是继承Role的子类都无须修改。
在Java中,子类只能继承一个父类,继承有个重要的关系,就是子类与父类间会有is-a的关系,中文称为“是一种”的关系。
多态
- 多态从字面上的解释就是某一类事物的多种存在形态,以抽象讲法解释就是使用单一接口操作多种类型的对象。父类或者接口的引用指向或者接收自己的子类对象,这便是多态的体现,多态的存在提高了程序的扩展性和后期可维护性,但是多态也需要有前提条件,首先,需要存在继承或者实现关系,其次还要有覆盖操作。面向对象的三大特征可以这么来描述:封装是继承的基础,继承是多态的基础。
- 多态就是使用单一接口操作多种类型的对象。
- 在继承父类之后,定义与父类中相同的方法部署,但执行内容不同,这称为重新定义。如:
父类:
public class Role3
{
...
public void fight()
{
//子类要重新定义fight的实际行为
}
}
子类:
public class SwordsMan3 extends Role3
{
public void fight()
{
System.out.println("挥剑攻击");
}
}
如果某方法区块中真的没有任何程序中代码操作,可以使用abstract标示该方法为抽象方法,该方法不用撰写{}区块,直接“;”结束即可。
子类如果继承抽象类,对于抽象方法有两种做法: 一种做法是继续标示该方法为abstract;另一种做法就是操作抽象方法。
继承语法细节
protected成员:被声明为protected的成员,相同包中的类可以直接存取,不同包中的类可以在继承后的子类直接存取。例如下面的例子:假如只想让子类可以直接存取name、level、与blood,就可以定义他们为protected。
如果想取得父类中的方法定义,可以在调用方法前,加上super关键字,重新定义的时候要注意,对于父类中的方法权限,只能扩大不能缩小。如果想执行父类中某构造函数,可以使用super()指定,但要注意的是,this()和super()只能选择其中之一调用,并且一定要在构造函数第一行执行。 如果class前使用了final关键字定义,那么表示这个类是最后一个,不会再有子类,即不能被继承。如果定义类时没有使用extends关键字指定继承任何类,那一定是继承java.lang.Object,在Java中,最上层的父类就是java.lang.Object。
在Java中,如果想取得父类中的方法定义,可以在调用方法前,加上super关键字。如:
public class SwordsMan6 extends Role6
{
...
@Override
public String toString()
{
return "剑士" + super.toString();
}
}
- 在Java中,子类只能继承一个父类,如果定义类时没有使用extends关键字指定继承任何类,那一定是继承java.lang.Object。
第七章 接口与多态
接口
- 对于“定义行为”,可以使用interface关键字定义,接口中的方法不能操作,直接表示为abstract,而且一定是public。类要操作接口,必须使用implements关键字。操作某接口时,对接口中定义的方法有两种处理方式,一是操作接口中定义的方法,二是再度将该方法标示为abstract 操作接口会有“拥有行为”关系,而继承是“是一种”的关系,对于接口多态语法的判断,方式是“右边是不是拥有左边的行为”,或者“右边对象是不是操作了左边接口”。 类可以操作两个以上的类,可以同时继承某个类,并操作某些接口,接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。
- 类要操作接口,必须使用implements关键字。操作某接口时,对接口中定义的方法有两种处理方式:一是操作接口中定义的方法;二是再度将该方法标示为abstract。如:
public abstract class Fish1 implements Swimmer1
{
protected String name;
public Fish1(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
@Override
public abstract void swim();
}
- 在Java中,类可以操作两个以上的类,也就是拥有两种以上的行为。如:
public class Seaplane3 implements Swimmer1,Flyer3
{
private String name;
public Seaplane3(String name)
{
this.name = name;
}
@Override
{
System.out.printf("海上飞机 %s 在飞%n",name);
}
@Override
public void swim()
{
System.out.printf("海上飞机 %s 航行海绵%n",name);
}
}
- 在Java中,类可以同事继承某个类,并操作某些接口,如:
public class FlyingFish3 extends Fish1 implements Flyer3
{
public FlyingFish3(String name)
{
super(name);
}
@Override
public void swim()
{
System.out.println("飞鱼游泳");
}
@Override
public void fly()
{
System.out.println("飞鱼会飞");
}
}
接口语法细节
- 使用interface来定义抽象的行为外观,方法要声明为public abstract,无须且不能有操作。为了方便,也可以省略public abstract,编译程序会协助补齐。可以使用接口枚举常数,只能定义为public static final。为了方便,也可以省略public static final。 接口可以继承别的接口,也可以同时继承两个以上的接口,也是使用extends关键字。 enum语法可用于定义枚举常数,enum实际上定义了类,而enum中列举的常数实际上是public static final,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只有类中才可以实例化。
- enum实际上定义了类,而enum中枚举的常数,实际上是public static final,且为枚举类型实例,无法撰写程序直接实例化枚举类型,因为构造函数权限设定为private,只要类中才可以实例化。如:
import static java.lang.System.out;
public class EnumGame
{
public static void main(String[] args)
{
play(EnumAction.RIGHT);
play(EnumAction.UP);
}
public static void play(EnumAction 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;
}
}
}
代码调试中的问题和解决过程
问题: 运行代码时出现下面这一问题
解决方法: 发现没有对Scanner这一变量进行定义,import之后成功运行。
其他(感悟、思考等,可选)
我慢慢的感觉学习Java已经变成了每天的一项日常,会不知不觉的在空闲的时候学习一会Java,慢慢的也体会到了Java的乐趣,我相信我会带着这种乐趣一直坚持下去。
学习进度条
| 代码行数(新增/积累) | 博客量(新增/积累 | 学习时间(新增/累积) | |
|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 |
| 第一周 | 16/16 | 1/1 | 8/8 |
| 第二周 | 120/120 | 2/2 | 12/12 |
| 第三周 | 130/150 | 1/1 | 9/9 |
| 第四周 | 180/200 | 1/1 | 15/15 |
参考资料
20155208徐子涵 2016-2017-2 《Java程序设计》第4周学习总结的更多相关文章
- 20155334 2016-2017-2 《Java程序设计》第九周学习总结
20155334 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章:整合数据库 16.1 JDBC入门 JDBC(Java DataBase Conn ...
- 20155321 2016-2017-2 《Java程序设计》第九周学习总结
20155321 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 厂商在实现JDBC驱动程序时,依方式可将驱动程序分为四种类型: JDBC-OD ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
随机推荐
- npm run dev 报错 版本太低
解决方案是: 先用命令: npm -v 查看下你的版本(我原来是 V3.1 不行) 然后用 cnpm install -g npm 更新版本 npm - v 变成最新的4.0.4 npm run d ...
- axur axure rp安装
axure rp安装 1◆ axure rp 文件下载 2◆创建安装目录 3◆ 安装图解 4◆汉化 替换 5◆ 使用 success
- mysql sql_mode=only_full_group_by问题?
视图查询的时候本地数据库报错: 解决办法: 1.查看sql_mode select @@global.sql_mode STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_Z ...
- nyoj 1091 还是01背包(超大数dp)
nyoj 1091 还是01背包 描述 有n个重量和价值分别为 wi 和 vi 的物品,从这些物品中挑选总重量不超过W的物品,求所有挑选方案中价值总和的最大值 1 <= n <=40 1 ...
- JavaBean理解
Java语言欠缺属性.事件.多重继承功能.所以,如果要在Java程序中实现一些面向对象编程的常见需求,只能手写大量胶水代码.Java Bean正是编写这套胶水代码的惯用模式或约定.这些约定包括getX ...
- HTML5 ④
块元素和行元素: 1.行元素:在一行内显示,不会自动换行的标签.不能设置宽高. 块元素:自动换行的标签,能设置宽高.*利于我们页面布局 比如:段落标签,标题标签都是块元素 2.两者可以互相转换,通 ...
- Java操作FTP工具类(实例详解)
这里使用Apache的FTP jar 包 没有使用Java自带的FTPjar包 工具类 package com.zit.ftp; import java.io.File; import java.i ...
- Android : 基于alsa库的音乐播放
继上篇:Android : alsa-lib 移植 ,这篇随笔实现一个demo基于移植好的alsa库在Android平台上播放wav文件: 一.利用ffmeg将一个mp3文件转换成wav文件: (1) ...
- 关于vivado implement后clock interaction报告的理解(更新中)
对于较大工程很难避免遇到CDC问题,vivado自带的分析工具可以报告跨时钟状态. 详情参看手册UG906-Design Analysis and Closure Techniques. (1)关于p ...
- CentOS7安装配置Amanda
参考: https://wenku.baidu.com/view/881e0c998e9951e79a892759.html yum -y install amanda* http://blog ...