类与对象

  • 环境
  • 类和对象的概念
  • 代码格式
    • 实例化对象
    • 调用方法
    • 小游戏:王者solo赛
    • 问题:如果有100个英雄呢?
  • 继承
    • 概念
    • 格式
    • 具体内容
      • 子类可以继承到父类的哪些
      • 方法重写:
      • 自动转型:
      • 优点
    • 实例:王者solo赛2.0
  • 总结

环境

本文使用eclipse来编译java语言

类和对象的概念

:具有相同属性的对象的集合;
对象:具体的事物,有状态和行为;
从对象中可以抽象出类,从类中可以实例化对象;
→例如,王者荣耀中,英雄是一个对象,每个英雄都有特定的属性,比如生命值,蓝量,ad,ap等;而具体的英雄,就是对象了,比如花木兰,鲁班等等。

代码格式

实例化对象

//访问修饰符   public  class 类名{//主函数 public static void main(String []args){  //输出语句 System.out.println("HELLO");}//声明属性访问修饰符 属性类型 属性变量名= 属性值;public String str;str = "oasis1500";//创建方法访问修饰符 返回值类型void 方法名(参数类型 参数变量名){  }public void add(int i){}}

调用方法

本类中: 直接用方法名、属性名的方式调用
不同类和主函数中: 使用一个类实例化一个对象用这个对象.属性变量名、方法名…

小游戏:王者solo赛

首先打开eclipse,左上角新建project

点开之后,右键src新建package,命名solo,然后右键package,新建三个类,分别命名为Stage,HuaMuLan,LuBan

package solo;public class Stage {public static void main(String[] args) {//实例化两个英雄类的对象HuaMuLan hmLan= new HuaMuLan();hmLan.name="【花木兰】";hmLan.ad=268;hmLan.hp=3232;LuBan lBan = new LuBan();lBan.name="【鲁班】";lBan.ad=180;lBan.hp=3302;while (lBan.hp>0&&hmLan.hp>0) {hmLan.ack(lBan);if(lBan.hp>0)//这个条件避免lBan.ack(hmLan);}}}
package solo;public class HuaMuLan {String name;int ad;int hp;public void ack(LuBan lb) {lb.hp-=ad;System.out.println(name+"攻击了"+lb.name+"使其失去了"+ad+"点血量值,其还剩下"+lb.hp);}}
package solo;public class LuBan {String name;int ad;int hp;public void ack(HuaMuLan  hml) {hml.hp-=ad;System.out.println(name+"攻击了"+hml.name+"使其失去了"+ad+"点血量值,其还剩下"+hml.hp);}
}

然后在右键run sa java project,即可看到对战效果,运行效果如下
【花木兰】攻击了【鲁班】使其失去了268点血量值,其还剩下3034
【鲁班】攻击了【花木兰】使其失去了180点血量值,其还剩下3052
······
【鲁班】攻击了【花木兰】使其失去了180点血量值,其还剩下1072
【花木兰】攻击了【鲁班】使其失去了268点血量值,其还剩下-182

问题:如果有100个英雄呢?

我们可以看到,这样一个对战游戏中,两两之间都必须有attack方法,否则就会报错,两三个英雄对战,很简单,可以一个个方法敲,100个呢?

继承

概念

子类从父类继承方法,使得子类具有父类相同的行为。这一点就很好地解决了我们上文提到的问题。

格式

子类 extends 父类

具体内容

子类可以继承到父类的哪些

子类可以继承到父类的所有属性和方法.
子类就可以被看作一个特殊的父类
父类又被称作超类

方法重写:

子类重写父类的方法;
格式:
将 访问修饰符 返回值类型 方法名(参数类型 )写的与需要重写的方法一样
{ }方法体可以改写

子类对象优先调用子类中重写的方法

自动转型:

子类对象可以被自动转型为父类类型的对象
父类名 对象名 = new 子类名();

缺点: 自动转型后子类对象不能调用子类中有而父类中无的方法.

优点

提高代码的重用性
结构更加清楚
能够更好的升级扩展

实例:王者solo赛2.0

升级内容,利用继承简化代码,且给人物加以技能特效
对代码作以下修改:
新建hero类(class)

package solo;public class Hero {// 子类共有的属性和方法,属性大家可以随意更改String name;int hp;int ad;int ap;int Attacked=5;public void ack(Hero hero) {Attacked--;if (Attacked == 0)Attacked = 5;//这里设置了一个全局buff,每个英雄攻击五次会有一回合无法攻击else {hero.hp -= ad;System.out.println(name + "攻击力" + hero.name + "使其失去了" + ad + "点生命");}}
}

对花木兰类做如下修改

package solo;public class HuaMuLan extends Hero{public void ack(Hero  hero) {int hpnow;hpnow=hero.hp;hero.hp-=(ad+hpnow*0.2);//这里给花木兰增加了一个被动,每次攻击附加当前生命值20%的伤害System.out.println(name+"攻击了"+hero.name+"使其失去了"+ad+"点血量值,其还剩下"+hero.hp);}}

对鲁班类做如下修改

package solo;public class LuBan extends Hero{public void ack(Hero hero){hero.hp-=(ad*0.3+80);//使鲁班的每次攻击有固定值(出了把风暴大剑?手动滑稽)System.out.println(name+"攻击了"+hero.name+"使其失去了"+ad*0.3+80+"点生命值。其还剩"+hero.hp);}}

新加入兰陵王类

package solo;public class LanLinWang extends Hero{public void ack(Hero  hero) {int hpnow;hpnow=hero.hp;if (hpnow>0.5*hp)hero.hp-=ad*(1+hpnow/hp);elsehero.hp-=ad*2;//给兰陵王一个被动,血量越低伤害越高,最高变为两倍伤害,妈妈再也不怕我秒不动人啦System.out.println(name+"攻击了"+hero.name+"使其失去了"+ad*(1+hpnow/hp)+"点血量值,其还剩下"+hero.hp);}
}

对Stage类做如下修改

package com;public class Stage {public static void main(String[] args) {//实例化两个英雄类的对象HuaMuLan hmLan = new HuaMuLan();hmLan.name="【花木兰】";hmLan.ad=268;hmLan.hp=3232;LuBan lBan = new LuBan();lBan.name="【鲁班】";lBan.ad=180;lBan.hp=3302;lBan.ap=120;LanLinWang llWang = new LanLinWang();llWang.name="【兰陵王】";llWang.ad=206;llWang.hp=3002;while (lBan.hp>0&&hmLan.hp>0) {hmLan.ack(lBan);if(lBan.hp>0)lBan.ack(hmLan);}while(hmLan.hp>0){llWang.ack(hmLan);if(hmLan.hp>0)hmLan.ack(llWang);}
//      else{//          llWang.ack(lBan);
//          if(lBan.hp>0)
//          lBan.ack(llWang);
//      }//这几行代码其实用不到,是想让兰陵王和胜者继续打,但是,开玩笑,我们怎么能让鲁班活着杀一个人呢(滑稽)}}

代码运行结果
【花木兰】攻击了【鲁班】使其失去了268点血量值,其还剩下2373
······
【花木兰】攻击了【鲁班】使其失去了268点血量值,其还剩下180
【花木兰】攻击了【鲁班】使其失去了268点血量值,其还剩下-124
【兰陵王】攻击了【花木兰】使其失去了206点血量值,其还剩下2306
【花木兰】攻击了【兰陵王】使其失去了268点血量值,其还剩下2133
······
【花木兰】攻击了【兰陵王】使其失去了268点血量值,其还剩下81
【兰陵王】攻击了【花木兰】使其失去了1236点血量值,其还剩下-784
补充:由于我在每个子类中都对父类的方法体进行了重写,所以实际上父类的方法体并没有被调用,一般调用格式应该是这样:
新建英雄HouYi(class)

package solo;public class HouYi extends Hero{}}

即不作任何修改地继承父类就可以啦

总结

类实例化对象,同一属性(可以多个)的对象构成类。类可以被继承以简化代码,子类也可以修改父类的方法。

java学习笔记-类与对象示例相关推荐

  1. (JAVA学习笔记) 类与对象小结

    1.类与对象 类是一个抽象的模板: 对象是类的一个具体的实例: 2.方法 方法的定义:修饰符,返回类型,方法名,参数列表,异常抛出,返回值. 方法的调用:静态方法,非静态方法,形参和实参,值传递和引用 ...

  2. Java学习笔记类对象多态继承(下)

    面向对象(下) 1.类的继承 一.什么是继承,有什么用? 继承:在现实世界当中也是存在的,例如:父亲很有钱,几子不用努力也很有钱 继承的作用: 基本作用:子类继承父类,代码可以得到复用.(这个不是重要 ...

  3. Java 入门知识学习笔记 (类和对象)

    一.类和对象的定义及关系 1.类是同一类别对象的抽象定义:可以理解为是某一类具体对象的模子,确定对象将会拥有的特性,包括该类对象具备的属性和方法. 2.对象是对类的一种具体化的客观存在,是对类的具体实 ...

  4. java学习(类和对象)

    1.今日导师双选,排名靠前但被拒三次.意难平. 2.简历还在投递中,面试时更注重本科项目经历. 3.研究生阶段,计算机学术?代码能力?哪个重要? 4.循环<可能否>,期待变强... 一.简 ...

  5. Java学习笔记07-面向对象

    面向对象 面向对象&面向过程的区别 面向过程思想 步骤清晰简单,第一步做什么,第二步做什么以及后续每一步都清清楚楚 面向过程适用于处理一些较为简单的问题 面向对象思想 物以类聚,分类的思维模式 ...

  6. Java学习DAY8~类和对象(一)~2021.01.17

    文章目录 1. 类和对象 1.1 简单认识类 1.2 类的定义格式 1.3 尝试定义一个类 2. 类的实例化 2.1 什么是实例化 2.2 类和对象的说明 2.3 常见定义类语法错误 3. 类的成员 ...

  7. Java学习笔记7-面向对象(续)

    一个国家有很多省,省又分为市,市里面又分为县或者镇,省与省之间又有很多不同的特色.之所以这样去分就是因为好区分,便于管理,这种原理和Java里面的包(package)很相似. 1.package(包) ...

  8. java学习笔记3--类与对象的基础

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note3.html,转载请注明源地址. 1.面向对象的程序设计方法概述 面向对象的程序设计 与 ...

  9. Java学习总结——类和对象

    玖--面向对象设计 类( class )和对象( object )是面向对象程序设计最重要的概念.要深入了解 Java 程序语言,一定要树立面向对象程序设计的观念. 一.理解面向对象程序设计 面向对象 ...

最新文章

  1. java构造方法何时被调用_构造方法何时被调用
  2. Spring整合的quartz任务调度的实现方式
  3. win7系统下升级IE11
  4. 【ajax】readyState=4并且status=200时,还进error方法
  5. 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件的解决方法(webpack热加载)
  6. WebSocket使用,包括服务端和客户端(JAVA实现)
  7. vue ui创建项目报错:Cannot read property ‘indexOf‘ of undefined解决方法
  8. JavaScript学习(八十二)—JavaScript的组成
  9. Redis+Keepalived内存数据库集群配置
  10. android audiotrack mp3,播放mp3数据压缩由JLayer和Audiotrack latin mp3在android
  11. 《圈圈教你玩USB》 第二章 USB 硬件系统设计_测试程序的编写和调试——看书笔记
  12. CSS cursor鼠标样式一览表
  13. ElementUI table 样式修改
  14. php助理面试技巧,助理类面试问题
  15. PHP file_get_contents函数详解
  16. 终身机器学习(Lifelong Machine Learning)综述
  17. python中ifelse语句怎么写_pythonifelse语句怎么写
  18. 【解决方案】EasyCVR视频结构化平台如何搭建肉品屠宰场全市联网远程监控系统?
  19. 注塑成型(注射模塑成型)
  20. CDOJ 1355 柱爷与三叉戟不得不说的故事(枚举子集状压dp)

热门文章

  1. python用with读文件的好处_python小课堂39 - 用 with 优雅的读写文件
  2. erwin7.3中文版
  3. 基于STM32+ZIGBEE组网的防火防潮预警系统
  4. 2019年8月 interllij idea 详细安装教程以及配置svn插件
  5. BFC/IFC/GFC/FFC分别是什么?
  6. JAVA 基础实践项目 -- 狼人杀
  7. C语言缓冲区基础知识
  8. 解决安装Oracle时检查监视器不通过的问题
  9. jsp ${param.id}用法
  10. BitLocker恢复获取密钥方法