第三次总结
概念:
类的组成:
1.属性;
2.方法:1)普通方法2)构造方法
构造方法:
public 类名 (数据类型 参数名...) { 代码... }
在没写构造方法的类中,java会默认生成一个无参的构造方法。若自己定义构造方法,则默认的构造方法会被覆盖。
方法重载:
同名的方法,根据参数的个数、类型、顺序来加以区分。
实例化对象:
类名 对象名= new 类名(参数值...);
等号左边的对象名存在内存的栈中,该对象的属性和方法则在堆中开辟空间存储。
栈 堆
————————————
对象名 属性、方法(首地址123)
123
引用传递:
引用传递适用于Java的引用数据类型(对象类型、类类型)。
(引用数据类型包含:数组、类、接口、抽象类。)
传递方式为传址(所在堆内存的首地址)。
值传递:
值传递适用于Java的八大基本数据类型和String类型。
传递方法为传值。
练习
回合制游戏:奥特曼和小怪兽要战斗,奥特曼还可以和Boss进行战斗,直到一方的血量为0的时候结束战斗,输出谁胜利了!
1.找出这个场景中的对象
2.找出每一个对象的特征和行为
3.根据类的格式和对象的特性与行为定义一个class
4.定义主函数的类,实例化对象和调用方法
思路:
根据前一次的练习进行改动。
首先新建一个Boss类,与Monster类相似。
Ultraman类中有表战斗的fight(int n ,Monster m)方法,涉及到Monster类型的一个参数。若要奥特曼还能够和Boss类型的对象战斗,则须重载该方法。方法名相同,参数类型不同的新方法fight(int n,Boss b)。
在主函数类中分别调用两个fight()方法。
※※※※※※※※※Monster类※※※※※※※※※
public class Monster {
private int blood ;
public Monster(){blood=1000;}//自定无参的构造方法,覆盖默认的
public void setBlood(int de){//单次掉血
this.blood = this.blood-de;
}
public int getblood(){return blood;}
public void fight(int n,Ultraman u){
switch(n){
case 48:
System.out.println("小怪兽Miss.. 奥特曼血槽
:"+u.getblood());
break;
case 49:
u.setBlood(10);
System.out.println("小怪兽给了奥特曼一击,伤害10
! 奥特曼血槽:"+u.getblood());
break;
case 50:
u.setBlood(20);
System.out.println("小怪兽给了奥特曼一!!暴击!
!伤害20!!! 奥特曼血槽:"+u.getblood());
break;
}
}
}
※※※※※※※※※同理的Boss类※※※※※※※※※
public class Boss{
private int blood =5000;
public void setBlood(int de){
this.blood = this.blood-de;
}
public int getblood(){return blood;}
public void fight(int n,Ultraman u){
switch(n){
case 48:
System.out.println("Boss Miss.. 奥特曼血槽:"+u.getblood());
break;
case 49:
u.setBlood(200);
System.out.println("Boss给了奥特曼一击,伤害100! 奥特曼血槽:"+u.getblood());
break;
case 50:
u.setBlood(400);
System.out.println("Boss给了奥特曼一!!暴击!!伤害200!!! 奥特曼血槽:"+u.getblood());
break;
}
}
}
※※※※※※※※※Ultraman类※※※※※※※※※
public class Ultraman {
public Ultraman(int blood){
this.blood=blood;
System.out.println("这只奥特曼的初始血量为:"+this.blood);
}
private int blood;
public void setBlood(int de){
this.blood = this.blood-de;
}
public int getblood(){return blood;}
//定义一个表示攻击动作的方法fight(),由于攻击对象为小怪兽,故一个参数为Monster类型的;另一个参数表示攻击掉血的随机值
public void fight(int n,Monster m){
switch(n){
case 48://此处考虑到char类型的0,1,2分别对应int类型的48,49,50
System.out.println("奥特曼Miss.. 小怪兽血槽:"+m.getblood());
break;
case 49:
m.setBlood(100);
System.out.println("奥特曼给了小怪兽一击,伤害100! 小怪兽血槽:"+m.getblood());
break;
case 50:
m.setBlood(200);
System.out.println("奥特曼给了小怪兽一!!暴击!!伤害200!!! 小怪兽血槽:"+m.getblood());
break;
}
}
//重载fight函数,参数为Boss类型
public void fight(int n,Boss b){
switch(n){
case 48:
System.out.println("奥特曼Miss.. Boss血槽:"+b.getblood());
break;
case 49:
b.setBlood(50);
System.out.println("奥特曼给了Boss一击,伤害50! Boss血槽:"+b.getblood());
break;
case 50:
b.setBlood(100);
System.out.println("奥特曼给了Boss一!!暴击!!伤害100!!! Boss血槽:"+b.getblood());
break;
}
}
}
※※※※※※※※※主函数类※※※※※※※※※
public class Game{
public static void main(String [] args){
Ultraman jack=new Ultraman(2000);//定义一个奥特曼类型的对象jack,赋以初始血量
Monster rose=new Monster();//再定义一个怪兽类型的对象rose..
Boss bb=new Boss();//再定义一个怪兽类型的对象bb
String s="1012111201112111111111211111";//以一个字符串模拟随机的
格斗状态
for(int i=0;i<s.length();i++){
if(jack.getblood() > 0 && rose.getblood() > 0){
if((i % 2 )== 0){
jack.fight((int)s.charAt(i),rose);}
else{
rose.fight((int)s.charAt(i),jack);}
}
}
if(jack.getblood() <= 0){System.out.println("奥特曼挂了,小怪兽
胜利%>_<%");}
if(rose.getblood() <= 0){System.out.println("小怪兽挂了,奥特曼
胜利O(∩_∩)O");}
for(int i=0;i<s.length();i++){
if(jack.getblood() > 0 && bb.getblood() > 0){
if((i % 2 )== 0){
jack.fight((int)s.charAt(i),bb);}
else{
bb.fight((int)s.charAt(i),jack);}
}
}
if(jack.getblood() <= 0){System.out.println("奥特曼挂了,Boss胜
利%>_<%");}
if(bb.getblood() <= 0){System.out.println("Boss挂了,奥特曼胜利
O(∩_∩)O");}
}
}
相关推荐
在类的构造方法中,`this`关键字可以用来调用同一类中的其他重载构造方法,以便于代码的复用和简化。这个特性使得开发者能够更高效地管理对象的初始化过程。 首先,我们要理解构造方法的作用。构造方法是Java类中...
### 三、方法重载 #### 1. 方法重载的定义 - 方法重载是指在一个类中可以有多个同名的方法,但这些方法的参数列表不同。 - 方法重载允许程序员以不同的方式调用同一个方法名称。 #### 2. 方法重载的例子 - 考虑...
子类构造方法的第一条语句通常是调用超类(即父类)的构造方法。这是因为子类继承了父类的属性和方法,所以在初始化子类对象时,也需要确保父类的状态被正确设置。这是通过使用`super`关键字来实现的,其语法如下: ...
构造方法重载** Java允许在一个类中定义多个构造方法,只要它们的参数列表不同,这就是构造方法的重载。重载提供了创建对象的灵活性,可以根据需要提供不同的初始化方式。 **5. 继承中的构造方法** 当一个类继承另...
### Java中的继承(子类调用父类构造方法) #### 一、继承的基本概念 Java是一种支持面向对象编程的语言,其中“继承”是一项核心特性。继承允许创建一个新的类(称为子类或派生类),该类继承了现有类(称为父类...
这里,我们可能会有一个函数或方法,它接受三个边长作为输入,然后检查是否满足任意两边之和大于第三边的三角形条件。如果满足,返回true,否则返回false。 构成三角形的条件是任意两边之和必须大于第三边。这个...
内容包括三章:1、构造方法与匿名对象;2、实例讲解—类设计分析(学生类);3、String类。
总的来说,C#中的方法重载是一种强大的工具,它允许我们根据参数类型或数量来设计灵活的函数接口,提高了代码的可读性和可维护性。在学习和实践中,我们应该熟练掌握这一特性,以提升我们的编程效率和代码质量。通过...
对于Date类中的构造函数,使用重载的方法,可以选择3中方式输出:1.MM/XX/DDDD 2.January 7 1989 3.37 1989(前一个参数为一年中的第37天) 使用s.equal("m")比较字符串。
`Monkey`类中有默认构造方法和带参数的构造方法,后者允许我们在创建对象时立即设置属性值。 接着,我们学习了如何创建和使用对象。在Java中,通过`new`关键字和类的构造方法来创建对象。实验中,我们创建了两个`...
在实例化矩形时,通过传入不同的参数,我们可以选择使用不同的构造器,如代码中的注释所示,`rectc1` 和 `rectc2` 分别调用了第一个和第二个构造器,而 `rectc3` 和 `rectc4` 使用了第三个和第四个构造器。...
在 Java 编程语言中,方法的重载(Overloading)是一种重要的概念,它允许在一个类中...在实际编程中,方法重载经常用于构造函数(以方便创建不同初始化状态的对象)和通用操作方法(如数学运算或集合操作)等场景。
4. 除法(`/`):重载`operator/`,需要将第一个分数的分子乘以第二个分数的分母,再将第一个分数的分母乘以第二个分数的分子,最后进行约分。 5. 约分(`~`):分数类可能还提供了一个单目操作符`operator~`,用于...
本文将详细解释 Java 应用程序习题第五章中的知识点,包括继承关系、方法覆盖、方法重载、构造方法、类型转换等重要概念。 1. 继承关系 在 Java 中,类 Student 继承自类 Person,这是一种继承关系。继承关系是一...
### Java第三次测验知识点解析 #### 一、选择题知识点解析 **1. 面向对象程序设计方法特性** - **多态性**:允许子类重写或重载父类的方法,使得不同的对象可以以不同的方式响应同一个消息。 - **静态性**:不是...
第5章总结 第五章 初始化与清理 5.1 用构造器确保初始化 1.构造器命名必须与类名相同 2.构造器也是方法,满足方法的各种特征,无参数的构造器称为默认构造器,默认构造方法或者无参构造器。在没有其他构造方法的...
1. 如果构造方法中包含`this`语句,表示调用本类中的其他构造方法,此时不会执行隐式三步。 2. 如果构造方法中包含`super`语句,表示调用父类的构造方法。 3. 若构造方法中既无`this`也无`super`,则默认调用父类的...
要求在第一个构造方法中调用第二个构造方法。该类还有两个重载的move()方法,其中一个无参,在屏幕上输出一行文字: XXX Moving!!(XXX为该动物的名字);另一个需要一个int参数n,在屏幕上输出n次 XXX Moving!!