java学习之类与对象篇——奥特曼打小怪兽

初次接触Java,我们就被告知Java是一种面向对象的程序设计语言,那么什么是面向对象呢?什么又是对象呢?带着这些个疑问,我们开始了Java学习之旅。

1、面向过程与面向对象

面向过程:就是在分析解决问题的时候,把问题分成若干个步骤,然后用函数把这些步骤一一实现,使用的时候一个一个调用就可以了。

面向对象:就是把构成的问题事物按照一定规则分解成多个独立的对象,通过调用对象的方法来解决问题。

面向对象开发,就是不断创建对象,使用对象,指挥对象做事情;

面向对象设计:就是管理和维护对象之间的关系;

面向对象的主要特征:封装性、继承性、多态性。

2、类与对象

类:是一组相关属性和行为的集合,是对象的抽象(如学生类,手机类,球类)。

对象:是对象的抽象(如学生类,手机类,球类)。

对象:是该类事物的具体体现,由类创建出来的,是类的实例(如张三,小米,篮球)。

在Java中,类用于描述多个对象的共同特征,它是对象的模板。对象用于描述现实中的个体,它是类的实例。

3、类的定义

成员变量:用于描述对象的特征,也称为属性;

成员方法:用于对象的行为,可简称为方法。

4、对象的创建

格式:类名 对象名 = new 类名()

5、对象的使用

成员变量:对象名.变量

成员方法:对象名.方法()

6、类的封装

类的封装是指隐藏对象的属性和实现细节,即将其私有化(用private修饰),仅对外提供公共访问方式(public修饰,如setXxx(),和getXxx())。

封装的好处:

a.隐藏实现细节,提供公共的访问方式;

b.提高了代码的复用性;

c.提高安全性。

7、继承性(接口与抽象类)

继承性主要描述类与类的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展。

原有类被称作为父类,新创建出来的类称作子类。子类会拥有父类所有的可继承的属性和方法。继承的关键字为extends。

继承的好处:

a.提高了代码的复用性;

b.提高了代码的维护性;

c.让类与类之间产生了关系,是多态的前提。

Java继承的特征:

a.Java只支持单继承,不支持多继承,但多个类可以继承同一个类;

b.Java支持多层继承(继承体系)。

8、方法的重写

在继承关系中,子类会自动继承父类中的定义的方法,但有时候子类中需要对父类的方法进行一些修改,即对父类的方法进行重写。

方法重写的注意事项:

a.父类中私有方法不能被重写;

b.子类重写父类方法时,访问权限不能更低。

方法重写的应用:

当子类需要父类的功能,而子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容

9、多态性

多态是指由于继承和重写机制,相同类型的对象调用相同的方法,由于参数类型不同而导致执行效果各异的现象。

多态前提和体现:

a.有继承关系;

b.有方法重写;

c.有父类引用指向子类对象。

多态的好处

a.提高了程序的维护性(由继承保证)

b.提高了程序的扩展性(由多态保证)

多态的弊端

不能访问子类特有功能

多态中的转型:

a.向上转型:子类引用的对象转换为父类类型,通俗地说,就是是将子类对象转为父类对象。(如Animal a=new Cat());

b.向下转型:把父类对象转为子类对象;

向下转型的前提是父类对象指向的是子类对象(也就是说,在向下转型之前,它得先向上转型);

向下转型只能转型为本类对象(猫是不能变成狗的)。(如Animal a = new Cat(); Cat c = ((Cat) a)

10、抽象类

在Java中,一个没有方法体的方法必须定义为抽象方法,抽象方法必须用abstract修饰,而一个类中包含抽象方法的时候,该类必须用必须用abstract修饰,而用abstract关键字修饰的类为抽象类。

抽象类的特点:

a.抽象类和抽象方法必须用abstract关键字修饰;

b.抽象类不一定有抽象方法,有抽象方法的类一定是抽象类;

c.抽象类不能实例化

d.抽象类的子类要么是抽象类,要么重写抽象类中的所有抽象方法。

11、接口

如果一个类中的所有方法都是抽象方法,则可以将这个类用另外一种方法式来定义,即接口。在定义接口时,需要用到interface关键字来声明。

接口特点:

a.接口用关键字interface表示

格式:interface 接口名 {}

b.类实现接口用implements表示

格式:class 类名 implements 接口名 {}

c.接口不能实例化

由具体的子类实例化,其实这也是多态的一种,接口多态。

d.接口的子类,要么是抽象类,要么重写接口中的所有抽象方法。

下面我们来看看奥特曼打小怪兽的具体代码吧!

创建角色类(父类)

/** 角色:* 属性:名字,血量,攻击力* 行为:攻击*/
package com.Liao.Altman0627;public class Role {private String name;private int volume;private int damage;public void setName(String n) {name = n;}public String getName() {return name;}public void setVolume(int n) {volume = n;}public int getVolume() {return volume;}public void setDamage(int n) {damage = n;}public int getDamage() {return damage;}public void attack(Role m, Role n) {n.setVolume(n.getVolume() - m.getDamage());System.out.println(n.getName() + "被" + m.getName() + "攻击了,");System.out.println(n.getName() + "掉血" + m.getDamage() + ",剩余血量" + n.getVolume());}
}

创建奥特曼类(继承角色类)

package com.Liao.Altman0627;public class Altman extends Role {}

创建怪兽类(继承角色类)

package com.Liao.Altman0627;public class Monster extends Role {}

创建Boss类(继承怪兽类)

package com.Liao.Altman0627;public class Boss extends Monster {private int volume=1200;//定义私有属性:血量private int v=volume;public void setVolume(int n){volume=n;}public int getVolume(){return volume;}//重写攻击方法,Boss血量低于20%时,攻击力加倍public void attack(Role m, Role n) {if ((double)m.getVolume()/v> 0.2) {n.setVolume(n.getVolume() - m.getDamage());System.out.println(n.getName() + "被" + m.getName() + "攻击了," + n.getName() + "掉血" + m.getDamage()+",剩余血量"+n.getVolume());} else {n.setVolume(n.getVolume() - 2 * m.getDamage());System.out.println(n.getName() + "被" + m.getName() + "攻击了," + n.getName() + "掉血" + m.getDamage() * 2+",剩余血量"+n.getVolume());}}}

主函数

package com.Liao.Altman0627;public class Manager {public static void main(String[] args) {Altman alt=new Altman();//创建奥特曼对象Monster mon=new Monster();//创建小怪兽对象Boss boss=new Boss();//创建boss对象alt.setName("奥特曼");//命名mon.setName("小怪兽");boss.setName("终极boss");alt.setVolume(1000);//设置血量mon.setVolume(300);alt.setDamage(100);//设置攻击力mon.setDamage(20);boss.setDamage(50);//奥特曼打怪兽while(alt.getVolume()>0&&mon.getVolume()>0){alt.attack(alt,mon);if(mon.getVolume()<=0){System.out.println("小怪兽被打死了!");break;}mon.attack(mon, alt);if(alt.getVolume()<=0){System.out.println("奥特曼离我们而去了!");break;}}//奥特曼打bosswhile(alt.getVolume()>0&&boss.getVolume()>0){alt.attack(alt,boss);if(boss.getVolume()<=0){System.out.println("终极boss被打死了!");break;}boss.attack(boss, alt);if(alt.getVolume()<=0){System.out.println("奥特曼离我们而去了!");break;} }}
}

java学习之类与对象篇——奥特曼打小怪兽相关推荐

  1. Python——用面相对象写奥特曼大战小怪兽

    一,知识点 基本的面向对象知识 理解继承,多态,封装,不会的小伙可以看这篇超详细教程 了解基本的装饰器知识不会的小伙伴可以看这个讲解 ** 二,代码(奥特曼大战小怪兽) from abc import ...

  2. Java学习之路---对象篇(Object)

    什么是对象? Java是一种面向对象的语言,那么什么是对象呢?我们将问题空间中的元素及其在解空间中的表示称之为"对象". "万物皆对象":将对象视为一个变量,可 ...

  3. Java学习---Day16_IO流基础篇

    Java学习-Day16_IO流基础篇 文件操作 操作磁盘上的某一个文件或某一个文件夹,可以对他们进行创建或删除.移动.属性获取.属性设置等操作.但是,不包含读取文件的内容.拷贝文件 ps:java中 ...

  4. Java学习笔记之基础篇

    Java学习笔记之基础篇 目录 Java如何体现平台的无关性? 面向对象(OO)的理解 面向对象和面向过程编程的区别 面向对象三大特征 静态绑定和动态绑定(后期绑定) 延伸:类之间的关系 组合(聚合) ...

  5. Java学习历程之----进阶篇(十一)

    千禧难题之二:      霍奇猜想:在非奇异复射影代数簇上, 任一霍奇类是代数闭链类的有理线性组合.它是关于非奇异复代数簇的代数拓扑和它由定义子簇的多项式方程所表述的几何的关联的猜想.由威廉·瓦伦斯· ...

  6. Java学习历程之----提升篇(六)

    科普 知识 前言 前面我们学习了Java语言的三大特性----继承,封装和多态,在前面的Java学习历程之----进阶篇(一)中我们学习到,在面向对象中,类和对象是最基本.最重要的组成单元.所有的对象 ...

  7. java学习--类与对象

    文章目录 java学习--类与对象 类的定义与对象的使用 类的私有成员的使用 java学习–类与对象 类的定义与对象的使用 类的定义与对象的使用 类的定义步骤: public 类名: //定义成员变量 ...

  8. invader的java学习第一天基础篇

    invader的java学习第一天基础篇 一.java主要历史 ①java是Sun公司的产品,09年被Oracle公司收购. ②java语言之父:詹姆士高斯林 二.jdk.jre.jvm三者关系 jd ...

  9. invader的java学习第二天基础篇

    invader的java学习第二天基础篇 一.深入了解第一个Hello World程序 public class Hello World{ public static void main(String ...

最新文章

  1. 横空出世,席卷互联网--评微软等公司数据结构+算法面试100题
  2. 【Python 自然语言处理 第二版】读书笔记2:获得文本语料和词汇资源
  3. Python处理pdf文件库 - PyPDF2详解
  4. qt样式表中背景图片的使用
  5. rabbitmq可靠性投递_RabbitMQ 可靠投递
  6. php 立即执行函数,关于javascrip的立即执行函数的解析
  7. 8421转换法可以轻松实现各进制之间的转换
  8. 【mysql】join的用法和修改数据表
  9. JSP教程第1讲笔记
  10. 软件测试之项目立项与需求评审
  11. Spring学习笔记 Spring项目介绍
  12. FPGA零基础学习:IP CORE 之 ROM设计
  13. html5音乐播放器网页底部,jQuery+html5网页底部固定mp3音乐播放器代码
  14. mysql计算同比和环比的区别_Mysql同比环比统计
  15. VMware中安装Win10超详细步骤
  16. 计算机考试如何使用电脑上的计算器
  17. 感觉自己不会的东西太多了,不知道如何下手?
  18. 物联网平台thingsboard在Windows上的安装和部署
  19. 大数据常见面试题 Hadoop篇(2)
  20. Cisco 4507交换机更换备用引擎操作手册

热门文章

  1. 墨羽卿画第二章第6节:修行路,修心途
  2. Problem 19:Counting Sundays
  3. MOS管不能关断的原因!!!
  4. 【docker入门指北】第七篇 Docker镜像讲解
  5. HTTP标准状态码及非官方拓展码大全
  6. 最新-如何在CSDN开通付费资源功能
  7. 用傅里叶级数表示复平面上的图形
  8. 信号与系统-matlab-动态圆-复平面方波信号的生成-行星模型
  9. 《ChatGPT Prompt Engineering for Developers》课程-提示词原则
  10. 神经网络学习小记录14——slim常用函数与如何训练、保存模型