`
淡淡淡的天空
  • 浏览: 8337 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

类和对象——以一个初学者的角度

阅读更多
    在面向对象程序设计中,类是一个抽象的概念,描述的是一类事物的完备信息,它将具有相同属性和行为(方法)的对象组成一个集合。类在现实生活中类似于蓝图或者模板,根据蓝图或者模板可以创造出具体的事物。例如:学生是一个类,具体某个学生张三就是该类中的一个对象。由此可见,类是Java程序的基本要素,并且所有的内容都必须要依赖于类才能存在。
    生活中也有类和对象。现实生活中只要是具体的一个物体或者具体的一件事情就是一个对象,也即是你眼睛所看到的任何一个物体,所想所做的任何一个事情都是一个对象。而根据对象相似的特征和相似的行为(方法)进行归类便可以形成一个个抽象的类。然而Java程序中的类是根据生活中对象(类)的特征和行为(功能)按照一种固定格式进行的定义的模板,通过这个模板我们可以建立多个具有不同属性和不同行为(方法)的对象。
    Java程序中的类含有两个部分,属性(变量),方法(函数),定义类的格式如下:
    public class 类名 {
//属性的格式
           访问修饰符 数据类型 属性名;

//方法的格式
访问修饰符 返回值类型 方法名([数据类型 参数名,...]){
         //代码
}
}
    接下来我们看一个实例:回合制对战游戏:奥特曼和小怪兽要进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
    首先找出所有的对象,然后根据对象定义类,最后再写一个主函数,创建对象并调用方法。
    1.对象
奥特曼
特征:姓名,攻击力,血量
行为:设置姓名,获取姓名,设置攻击力,获取攻击力,设置血量,获取血量,攻击小怪兽
小怪兽
特征:姓名,攻击力,血量
行为:设置姓名,获取姓名,设置攻击力,获取攻击力,设置血量,获取血量,攻击奥特曼

    2.定义类,属性和方法
有几个对象就定义几个类
    3.类:主函数中:创建对象和调用方法
创建奥特曼类:
    public class Aoteman{
private String name;
private int strength;
private int blood;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setStrength(int strength){
this.strength=strength;
}
public int getStrength(){
return strength;
}
public void setBlood(int blood){
this.blood=blood;
}
public int getBlood(){
return blood;
}

public void flight(Xiaoguaishou x){
x.setBlood(x.getBlood()-getStrength());
System.out.println(x.getName()+"被"+name+"攻击了,剩余的血量是"+x.getBlood());
if (x.getBlood()<=0)
System.out.println(name+"胜利了");
}
}
    创建小怪兽类:
    public class Xiaoguaishou{
private String name;
private int strength;
private int blood;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setStrength(int strength){
this.strength=strength;
}
public int getStrength(){
return strength;
}
public void setBlood(int blood){
this.blood=blood;
}
public int getBlood(){
return blood;
}

public void flight(Aoteman a){
a.setBlood(a.getBlood()-getStrength());
System.out.println(a.getName()+"被"+name+"攻击了,剩余的血量是"+a.getBlood());
if (a.getBlood()<=0)
System.out.println(name+"胜利了");
}
}
    写主函数,创建对象调用方法:
    public class Flight{
public static void main(String[] args){
Aoteman a=new Aoteman();
a.setName("奥特曼");
a.getName();
a.setStrength(10);
a.getStrength();
a.setBlood(60);
a.getBlood();
Xiaoguaishou x=new Xiaoguaishou();
x.setName("小怪兽");
x.getName();
x.setStrength(10);
x.getStrength();
x.setBlood(50);
x.getBlood();
while(a.getBlood()>0&&x.getBlood()>0)
{a.flight(x);
x.flight(a);}
}
}
    构造方法是用来实例化对象,给属性赋初始值。当用new创建一个对象的时候构造方法就会被调用。在一个类中如果没有定义任何构造方法,系统就会为该类自动创建一个无参的构造方法,且方法体中没有任何语句,而当显式定义类的构造方法后,系统就不再自动创建默认的构造方法。
    构造方法是一个特殊的方法。Java中的每个类都有构造方法,用来初始化该类的一个对象的构造方法具有和类名相同的名称,而且不返回任何数据类型,构造方法一般都用public类型类修饰,这样才能在任意的位置创建类的实例。构造方法每使用一次就会创建一个新对象,而普通方法只要调用的对象不变,那么还是同一个方法。
    方法重载就是在同一个类或者父子类之间创建同名的多个方法,这些方法有不同的参数列表,所谓不同的参数列表及时指方法所带的参数个数,参数类型,参数顺序至少要有一个不同。
    this表示的是当前调用方法的对象,类似于生活中的"我"。
    接下来看一个实例:奥特曼和小怪兽要进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!胜利的一方满血复活。胜利的一方要和Boss进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
    首先创建奥特曼类并重载攻击方法,因为奥特曼不止要攻击小怪兽,如果他赢了还要攻击Boss(并采用随机数生成攻击力,使得结果具有不确定性):
    public class Aoteman{
private String name;
private int strength;
private int blood;
java.util.Random rand = new java.util.Random();
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setStrength(int strength){
this.strength=strength;
}
public int getStrength(){
return strength;
}
public void setBlood(int blood){
this.blood=blood;
}
public int getBlood(){
return blood;
}

public  void flight(Xiaoguaishou x){
x.setBlood(x.getBlood()-rand.nextInt(getStrength()));
System.out.println(x.getName()+"被"+name+"攻击了,剩余的血量是"+x.getBlood());
if (x.getBlood()<=0)
System.out.println(name+"胜利了");
}
public  void flight(Boss b){
b.setBlood(b.getBlood()-rand.nextInt(getStrength()));
System.out.println(b.getName()+"被"+name+"攻击了,剩余的血量是"+b.getBlood());
if (b.getBlood()<=0)
System.out.println(name+"胜利了");
}
}
    接着创建小怪兽类和Boss类,具体方法和创建奥特曼类相似:
    public class Xiaoguaishou{
private String name;
private int strength;
private int blood;


java.util.Random rand = new java.util.Random();
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setStrength(int strength){
this.strength=strength;
}
public int getStrength(){
return strength;
}
public void setBlood(int blood){
this.blood=blood;
}
public int getBlood(){
return blood;
}

public void flight(Aoteman a){
a.setBlood(a.getBlood()-rand.nextInt(getStrength()));
System.out.println(a.getName()+"被"+name+"攻击了,剩余的血量是"+a.getBlood());
if (a.getBlood()<=0)
System.out.println(name+"胜利了");
}
public void flight(Boss b){
b.setBlood(b.getBlood()-rand.nextInt(getStrength()));
System.out.println(b.getName()+"被"+name+"攻击了,剩余的血量是"+b.getBlood());
if (b.getBlood()<=0)
System.out.println(name+"胜利了");
}
}

    public class Boss{
private String name;
private int strength;
private int blood;
java.util.Random rand=new java.util.Random();


public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setStrength(int strength){
this.strength=strength;
}
public int getStrength(){
return strength;
}
public void setBlood(int blood){
this.blood=blood;
}
public int getBlood(){
return blood;
}

public void flight(Aoteman a){
a.setBlood(a.getBlood()-rand.nextInt(getStrength()));
System.out.println(a.getName()+"被"+name+"攻击了,剩余的血量是"+a.getBlood());
if (a.getBlood()<=0)
System.out.println(name+"胜利了");
}
public void flight(Xiaoguaishou x){
x.setBlood(x.getBlood()-rand.nextInt(getStrength()));
System.out.println(x.getName()+"被"+name+"攻击了,剩余的血量是"+x.getBlood());
if (x.getBlood()<=0)
System.out.println(name+"胜利了");
}
}
    最后写主函数,创建对象并调用攻击方法:
    public class Flight{
public static void main(String[] args){
Aoteman a=new Aoteman();
a.setName("奥特曼");
a.getName();
a.setStrength(10);
a.getStrength();
a.setBlood(50);
a.getBlood();
Xiaoguaishou x=new Xiaoguaishou();
x.setName("小怪兽");
x.getName();
x.setStrength(10);
x.getStrength();
x.setBlood(50);
x.getBlood();
Boss b=new Boss();
b.setName("Boss");
b.getName();
b.setStrength(10);
b.getStrength();
b.setBlood(50);
b.getBlood();
while(a.getBlood()>0&&x.getBlood()>0){
a.flight(x);
x.flight(a);
}

if(a.getBlood()<=0&&x.getBlood()>0){
x.setBlood(50);
while(x.getBlood()>0&&b.getBlood()>0)
{x.flight(b);
b.flight(x);}}
else if(x.getBlood()<=0&&a.getBlood()>0){
a.setBlood(50);
while(a.getBlood()>0&&b.getBlood()>0)
{a.flight(b);
b.flight(a);}
}
}
}
  • 大小: 9.4 KB
  • 大小: 33 KB
  • 大小: 30.1 KB
分享到:
评论

相关推荐

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表...,共包含562个C#编程中常用的属性、方法、类和各种技术...

    面向对象思想学习(精华版)

    面向对象思想是编程领域中的一个重要概念,它是一种模拟现实世界中对象和类的抽象思维方式,使得代码更加结构化、模块化。本资源“面向对象思想学习(精华版)”汇集了多位资深程序员的经验心得,旨在帮助初学者和有...

    对入初学者的自编VB小游戏源码

    总的来说,"对入初学者的自编VB小游戏源码"提供了一个实践性的学习平台,让初学者能够在实际操作中掌握VB编程的基本概念和技术。通过这个撞球游戏,你可以锻炼编程思维,提升解决问题的能力,为以后的编程生涯打下...

    软件工程——实践者的研究方法(原始版)

    ### 软件工程——实践者的研究方法 #### 一、引言与作者背景 《软件工程——实践者的研究方法》是由Roger S. Pressman所著的一本经典教材,本书全面介绍了...无论是对于初学者还是有经验的工程师,都能从中获益匪浅。

    cad基础教程适合初学者PPT教案.pptx

    计算机辅助设计(CAD)是现代工程设计领域不可或缺的工具,本教程针对初学者,旨在提供一个清晰易懂的CAD2004入门指导。CAD2004界面友好,功能强大,是学习CAD的基础版本。 1. **CAD2004窗口介绍** - **标准工具栏...

    皮特的故事——委托、事件

    在《皮特的故事——委托、事件》这篇故事中,作者巧妙地运用了一个寓教于乐的方式,通过讲述一个名为彼得的工人如何与他的老板沟通工作进度的故事,来解释编程中的几个关键概念:委托、接口、事件以及异步编程。...

    openGL编3D动画——摄像漫游

    OpenGL编3D动画——摄像漫游是一个面向初学者的学习资源,旨在帮助开发者通过OpenGL技术创建动态的3D场景。OpenGL是一种强大的图形库,被广泛应用于游戏开发、科学可视化和工程应用等领域。它允许程序员直接控制硬件...

    matlab——算法&程序

    描述中提到的“matlab的诸多程序,都是自己搜集整理的,大部分都有注释”,这表明提供的内容可能是一系列带有注释的MATLAB代码示例,这些代码可以帮助初学者快速理解和上手MATLAB编程。通过注释,用户可以理解每个...

    计算机图形学OpenGL——地月系

    5. VC++6.0:此项目使用的开发环境是Visual C++ 6.0,这是一个经典的微软C++编译器和集成开发环境,虽然现在已经有些过时,但它仍然支持OpenGL编程,并且是学习图形学初学者常用的工具。 通过这个地月系项目,你...

    戏说面向对象程序设计之C#版

    面向对象编程并非只是编写代码的技术,它还是一种思维方式,要求开发者站在对象的角度去思考问题,设计合理的类结构和对象之间的交互方式。良好的面向对象设计,可以使软件具有良好的可维护性、可扩展性和可复用性,...

    对python编程语言入门的一些个人理解以及开发环境推荐(csdn)————程序.pdf

    Jupyter Notebook提供了一个Web界面,允许开发者以单元格的形式编写和运行Python代码,同时展示结果,包括文本、图表和其他可视化内容。这种分块执行的方式非常适合调试和逐步探索问题,而且可以方便地保存和分享...

    ASP.NET源码——Silverlight时钟源码.zip

    这个源码实例可以作为初学者练习Silverlight和ASP.NET结合开发的起点,对于有经验的开发者来说,也是研究和优化客户端呈现性能的一个参考。通过分析和修改源码,可以深入理解Silverlight的特性和ASP.NET的集成方式。

    Scratch是一个非常适合初学者的图形化编程语言.docx

    对于初学者而言,Scratch是一个极佳的起点,它不仅能够帮助他们理解编程的基本概念,还能激发他们探索更多编程领域的好奇心。希望以上介绍能帮助你更好地理解和使用Scratch,如果你有任何疑问或者想要深入了解某些...

    iOS中的手势密码——swift纯代码版

    本示例项目“iOS中的手势密码——swift纯代码版”是使用Swift编程语言实现的手势密码功能,无需借助任何第三方库,非常适合初学者进行学习和实践。 Swift作为Apple官方推荐的编程语言,具有简洁、类型安全和高性能...

    C++小游戏——射击小行星源码

    这种类型的游戏通常有简单的规则和直观的操作,适合初学者进行实践。 在源代码中,我们可能会看到以下几个关键组件: 1. **飞船类(Spaceship)**:定义飞船的属性如位置、速度、旋转角度等,以及相关的操作如移动...

    应用源码项目之——漂亮的平台书架.zip

    该项目旨在为开发者提供一个直观、美观的书架界面,展示应用程序或者书籍内容,是Android开发初学者和进阶者提升技能的良好实践。 首先,从Android开发的角度来看,这个项目涉及到以下几个关键知识点: 1. **用户...

Global site tag (gtag.js) - Google Analytics