[Java教程]Java基础学习小记

0 2016-10-07 18:00:07

题外话:总结了多年的学习心得,不得不说,睡眠是一个学习者的必需品!所谓“早起毁一天”不是没有道理哪,特别对Coders来说,有几天不是加班到夜里。好吧,我承认对于初学Java的我,昨日头脑顿路,Java的继承与多态,看得我是有点小懵逼。其实大致是懂了,不过到了具体应用中,特别是比较复杂的继承和调用关系的时候些许迷路。好了,话不多说,明日再把继承和多态来个总结,今日先对多态来个小记。

-------------------------------------------------------------------------------------------------------------------

现在我们要做这么一个媒体库,用来存放CD和DVD。可以往媒体库里添加CD和DVD,还可以列出来媒体库里所有的CD和DVD。

我们用到了继承的概念:CD是一个对象,DVD也是。两者又有很多相似的地方,比方说都有名字,播放时间,评论,等等,为了以后便于管理和调试,我们做了一个父类叫Item,它下面有两个子类:CD,DVD。

然后我们还需要做一个类(对象)来管理它们,这个对象有一个ArrayList的成员变量当作媒体库,有一个add函数用来添加CD或DVD,还得有个list函数用来列出媒体库里的所有东西。我们给这个类起名Database。

这样我们就要做以下四个java源文件:

源码:

1 package dome; 2 3 import java.util.ArrayList; 4 5 public class Database { 6 7 private ArrayList listItem = new ArrayList(); 8 9 public void add(Item item) {10 listItem.add(item);11 }12 13 public void list() {14 for(Item item:listItem) {15 item.print();16 }17 }18 19 public static void main(String[] args) {20 Database db = new Database();21 db.add(new CD("黑梦",600,true,"Classic Album","窦唯",10));22 db.add(new DVD("功夫",900,false,"Let's do this!","周星驰"));23 db.add(new CD("Wall",700,false,"Psychedelic Rock","PinkFloyd",15));24 db.list();25 }26 27 }

Database.java

1 package dome; 2 3 public class Item { 4 5 private String title; 6 private int playTime; 7 private boolean gotIt = false; 8 private String comment; 9 10 public Item(String title, int playTime, boolean gotIt, String comment) {11 super();12 this.title = title;13 this.playTime = playTime;14 this.gotIt = gotIt;15 this.comment = comment;16 }17 18 public void print() {19 System.out.print(title+":"+playTime+":"+gotIt+":"+comment);20 }21 22 }

Item.java

1 package dome; 2 3 public class CD extends Item { 4 5 private String artist; 6 private int numofTracks; 7 8 public CD(String title, int playTime, boolean gotIt, String comment, String artist, int numofTracks) { 9 super(title, playTime, gotIt, comment);10 this.artist = artist;11 this.numofTracks = numofTracks;12 }13 14 public void print() {15 System.out.print("CD:");16 super.print();17 System.out.println(":"+artist+":"+numofTracks);18 }19 20 }

CD.java

1 package dome; 2 3 public class DVD extends Item { 4 5 private String director; 6 7 public DVD(String title, int playTime, boolean gotIt, String comment, String director) { 8 super(title, playTime, gotIt, comment); 9 this.director = director;10 }11 12 public void print() {13 System.out.print("DVD:");14 super.print();15 System.out.println(":"+director);16 }17 18 }

DVD.java

运行:

这里有两个概念:

多态变量:在这里可以说是,一个父类下面有两个子类,在Database里第9行:Item item,定义了一个对象变量item,这个item是Item类,这个item还只是一个变量,是一个对象的管理者,但还没有具体要去管的那个对象。在main函数里可以去给item赋一个CD,也可以给他赋DVD,所以这个item变量是要根据程序运行的时候才能知道他要管理的那个对象是什么。这个item就是多态变量。

向上造型:想上造型是指拿一个子类的对象给父类的对象变量,或者说拿一个子类的对象当父类的对象来用,如Database里db.add一样,我们可以拿一个CD或DVD给item这个Item类对象变量。向上造型总是安全的。

-------------------------------------------------------------------------------------------------------------------

然后是多态:

在Database运行的过程中,第15行,有句item.print

我们可以看到这是在调用Item里的print函数,不过我们从程序运行结果来看仿佛不是这么回事,运行结果显示明明是调用CD.print();和DVD.print();的结果。

Item.print():

CD.print():

DVD.print():

这就要用多态去解释:首先当子类和父类里有相同名称的函数时,子类里的函数会去覆盖(override)从父类那里继承来的那个同名函数,于是从父类来的那个函数就会隐藏起来不起作用。然后Database第15行里的item会去看它管理的是什么它自己的Item类还是他的子类,如果是它的子类,那么这个print函数就会用它子类那里的print函数。

本文网址:http://www.shaoqun.com/a/253263.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

JAVA

0

java基础小记_[Java教程]Java基础学习小记相关推荐

  1. java基础分享_一、java基础教程

    1.java是一门比较纯粹的面向对象编程语言,所以java的所有代码都必须写在类的内部. 1.1 java的可执行文件后缀名是".java",例如HelloWorld.java,并 ...

  2. java怎么安装_最新版Java安装教程

    我是Presikid,今天又来更新文章啦,今天要来教大家如何正确.快速地安装Java最新版本. 备注:这篇文章的教程是关于JRE的,不是安装JDK的,两者之间有莫大的区别,JRE是Java运行环境,运 ...

  3. 我的世界java服务器刷_一个教程, 叫你如何在服务器刷op

    教 你 如 何 在 服 务 器 内 刷 取op~! 首先打开JAVA文件夹 找到bin\client 里面的Xusage 然后打开 然后会得到这个内容 -Xmixed           mixed ...

  4. java应聘兼职_学的Java如何找兼职?

    Java相信大家应该都不会很陌生,生活中很多的程序都是用Java编写而成的,正因如此才有这么多学习Java的同学,有些同学表示我感觉自己学的差不多了,想要找一些兼职一方面锻炼自己,一方面还能赚点外快, ...

  5. java 堆大小_适当的Java堆大小的5个技巧

    java 堆大小 确定生产系统合适的Java堆大小不是一件容易的事. 在我的Java EE企业经验中,由于Java堆容量和调整不足,我遇到了多个性能问题案例. 本文将为您提供5个技巧,这些技巧可以帮助 ...

  6. java设计模式并发_[高并发Java 七] 并发设计模式

    [高并发Java 七] 并发设计模式 [高并发Java 七] 并发设计模式 为什么80%的码农都做不了架构师?>>> 在软件工程中,设计模式(design pattern)是对软件设 ...

  7. java 时区处理_如何使用Java处理日历时区?

    如何使用Java处理日历时区? 我有一个来自我的应用程序的Timestamp值. 用户可以在任何给定的本地TimeZone中. 由于此日期用于假定给定时间始终为GMT的WebService,因此我需要 ...

  8. java 字符串乱码_这份Java面试题含答案解析竟然真的让你不用在面试上“如履薄冰”...

    面试题集共分为以下十部分: 一.Core Java: 1 - 95 题1 - 24 页 基础及语法: 1 - 61 题1 - 13 页 异常: 62 - 69 题13 - 15 页 集合: 70 - ...

  9. 重庆找Java开发工作_重庆【Java开发程序员】

    重庆[Java开发程序员],提倡一切为了学员就业的办学思想,教学过程中坚持以练习企业项目为主,让学员真正能学到技术,毕业就能适应工作岗位. 重庆[Java开发程序员], Java 编程开发.而且很多软 ...

  10. java replaceall正则表达式_编写高性能Java代码的最佳实践

    作者:Eugen Paraschiv 翻译:雁惊寒https://dzone.com 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践 ...

最新文章

  1. linux病毒木马分析,Linux平台“盖茨木马”分析
  2. 我常用的python函数(part3)--time.sleep方法
  3. 2019年,最值得期待的科学突破将是?
  4. 奥飞娱乐:贝肯熊和镇魂街盲盒产品计划于2021年下半年上市
  5. 基于JAVA+Servlet+JSP+MYSQL的超市管理系统
  6. mysql序列化字段反序列化_序列化serialize()与反序列化unserialize()的实例
  7. FPGA系列之一:Cyclone V中的时钟资源
  8. 手把手教你VMware14虚拟机安装教程「图文附软件」
  9. WeUI源码学习笔记一
  10. 将ceph与calamari相连(connect ceph servers to calamari)
  11. 程序猿成长之路之密码学篇-DES介绍
  12. DDL和DML的定义和区别
  13. redis查看某一个key的大小_redis查询key的内存大小
  14. chtagpt使用指南
  15. python调用linux命令
  16. openwrt中br-lan,eth0,eth0.1,eth0.2 已经 实际网口wan,lan对应的配置
  17. 微信视频文件过大,无法传输?教你一招快速压缩文件!
  18. Qt 去除字符串中的空格
  19. ubuntu 获取root权限的方法
  20. html上拉回弹效果,实现页面回弹滑动效果

热门文章

  1. 战地4高性能服务器,战地4服务器推荐配置
  2. 华三的AC对接绿洲平台的无线认证配置
  3. 磁带机LTO类型简单介绍(Tape drive LTO type)
  4. ppi协议源码 c语言,S7-200 PLC的PPI协议及其开发实例
  5. 无法访问计算机请检查名称的拼写,Win7访问共享文件夹提示“请检查名称的拼写”怎么办?...
  6. 一个直播源码搭建教程,教你如何完成一个完整的直播
  7. 情景软工编程题(待更新)
  8. Windows 7常用48款软件兼容性测试
  9. 阿里云centos7.2部署tomcat10
  10. Pinia基本使用与源码分析-手动实现部分主要功能