300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > java学习之类与对象篇——奥特曼打小怪兽

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

时间:2022-01-08 09:30:53

相关推荐

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

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.向下转型:把父类对象转为子类对象;

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

l向下转型只能转型为本类对象(猫是不能变成狗的)。(如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;}}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。