面向对象之封装,继承,多态

1.封装

封装是面向对象的三大基本属性之一,简单理解一下就是把程序不想让别人看到的东西(比如变量,比如方法)包装隐藏起来。

这一块复杂的概念不是很多(常用private 和 public ),记起来也不是很复杂。

private:私有类型,仅在同一个类中时可以调用

default:默认类型,不加其他类型的时候默认是它,在同一个类或同一个包下都可以调用

protected:保护类型,在同一个类或同一个包下,或者继承了该类的子类可以调用

public:公共类型,顾名思义,就是公开的类型,所有类都可以调用它

举个例子:

private int age;//女生的年龄是很隐秘的,不能随便问,设置为私有的话除了自己谁都没法调用

public String name;//你的名字只要别人想认识你就可以问,也有权利直接叫你的名字

2.继承

继承在面向对象中是个很重要的概念,许多许多东西都是基于继承的基础上的

所有的类都继承于Object类

也就是所有的类默认有一个父类Object(除了Object自己吧)

package weapon;
//定义一个武器类
//属性: 名称 ,伤害,攻击速度,价格,技能倍率,技能名称
//方法:技能攻击
//直接定义public类型的,方便使用
public class Weapon {public String name;     //名称public double damage;  //伤害public double speed;    //攻击速度private double price; //价格public double skillRate;    //技能倍率public String skillName;  //技能名称Weapon(){}Weapon(Dagger d){this.name=d.name;}public double useSkill(String skillName , double skillrate){    //技能攻击System.out.println("使用了技能:"+skillName+"!!!");return this.damage*skillrate;}[get-set方法]}

首先这就是我们的武器类中手写的内容了,多写了一个带参构造偷个懒。然后在方法下面生成【Get-Set】方法。(前期手写代码为了增加熟练度,还能练练打字速度,多好。这里为了防止出错就不手写了)

接下来是匕首类(子类都一样所以这里就只拿匕首类举例子了):

package weapon;
//匕首类
public class Dagger extends Weapon {public String name="匕首";
}

没错为了简单子类里面就写了这么点,定义一下名字方便区分调用。

接下来是main方法,作为程序的入口开始使用刚才定义的武器:

package weapon;public class UseWeapon {public static void main(String[] args) {//      首先,要获得一把武器,这里我们获得的是匕首,把它装备上Weapon w = new Weapon(new Dagger());
//      查看一下武器的名字System.out.println("装备的武器名为:");System.out.println(w.name);
//      假设使用武器的为一只攻击力为0的瑶,设定武器的伤害为200.0,查看用武器攻击一下造成多少点伤害w.setDamage(200.0);System.out.println("匕首每次攻击的伤害为: " + w.getDamage());
//        这时定义两个技能,然后先后使用:
//        技能1:匕首投掷,扔出手中的匕首造成2.5倍伤害
//        技能2:狂舔匕首,舔一口世界上最毒的匕首,造成5倍伤害
//        使用技能"匕首投掷"w.setSkillName("匕首投掷");w.setSkillRate(2.5);System.out.println("造成伤害:" + w.useSkill(w.getSkillName(),w.getSkillRate()));
//        使用技能"狂舔匕首"w.setSkillName("狂舔匕首");w.setSkillRate(5.0);System.out.println("造成伤害:" + w.useSkill(w.getSkillName(),w.getSkillRate()));}
}

然后是运行结果:

这样的话封装和继承就练习完啦,虽然代码很简单但是举的例子都是很形象的,嗯,我是这么觉得的。

你以为就这么完了吗?错啦,还有我埋了多年的一手老坑!!!

 public double speed;    //攻击速度private double price; //价格`

有人注意到价格的类型是私有的吗?不多比比上截图代码,跑起来…


结果飘红了,跑不起来,,,其实道理很简单,speed 是公开变量 ( public ),谁都可以调用,但价格是私有变量 ( private ) ,跟貂蝉一样,是藏起来自己偷偷看的。

---->
回去想了一下,就举了一个例子显得不够生动,而且虽然我偷懒了但是活已经干完了啊,万一有杠精(就我这阅读量难了)说:啊你这个人太懒了,写个练习还写一半,还偷懒,色反!
好吧,为了证明我没偷懒,活真的干完了,我又打开IDEA找到了它,,,

package example.weapon;
//斧头类
public class Axe extends Weapon {}

这不是写完了吗?辣么大一个斧头类看不见吗?空的???辣么大一个extends看不见吗?来来看着我的狼牙棒告诉我上面说的啥…
上代码!

//这是在main方法里面接着匕首写的
//        首先你要得到一把斧头Weapon axe = new Axe();
//        因为前面偷懒了所以现在要受累一点把名字给它axe.setName("斧头");
//        然后对准上面的代码,ctrl c + ctrl v//      查看一下武器的名字System.out.println("装备的武器名为:");System.out.println(axe.getName());
//      假设使用武器的为一只攻击力为0的瑶,设定武器的伤害为500.0,查看用武器攻击一下造成多少点伤害axe.setDamage(500.0);System.out.println(axe.getName() + "每次攻击的伤害为: " + axe.getDamage());
//        这时定义两个技能,然后先后使用:
//        技能1:力劈华山,蓄力后扔出手中的斧头造成5倍伤害
//        技能2:开天辟地,终结技,在一系列不可描述的动作后,释放技能造成10倍伤害
//        使用技能"力劈华山"axe.setSkillName("力劈华山");axe.setSkillRate(5);System.out.println("造成伤害:" + axe.useSkill(axe.getSkillName(),axe.getSkillRate()));
//        使用技能"狂舔匕首"axe.setSkillName("开天辟地");axe.setSkillRate(10);System.out.println("造成伤害:" + axe.useSkill(axe.getSkillName(),axe.getSkillRate()));

这是运行结果图

以下是一些废话:

#唉,光写代码太痛苦了,只能说说骚话娱乐一下自己。不过我发现我有写文案的天赋,要不我转行去当小编吧,搞不好还能成网红。

#其实以后写起来不用这么复杂的,各种数据可以查数据库拿到然后传进来,不用手动输入的,还可以用框架,省时省力。至于为什么这里这么写我只能说:我仍在学习中,虽然目前的内容都是在复习但是迟早会碰上我不熟悉的,能学到就是赚,反正疫情下到处乱撞找工作不如踏踏实实学点东西装在肚子里。
#本来准备写个文字幻想类的小游戏,慢慢把所学的东西加进去,于是就写了个Step类计算步数,写了个Random类计算随机遇敌和事件,写了Action类集中写动作,写了Hero和Monster还有武器类…ect。然后我看到了接口,再想到JDBC,再想想接下来的的框架…

3.多态

多态怎么说呢,就是代码的不确定性,再具体点我只能说,父类引用指向子类对象,这样通过该引用可以直接(重写)调用其他方法。
方法函数等等并不是全部规定死了怎么跑怎么跑,这一部分有点难总结,emmmmmm ,先百度看看,有时间再写吧,先就这样了(其实真的是懒得总结了)。
其实在创建斧头的时候我又埋下了一个坑

//        首先你要得到一把斧头Weapon axe = new Axe();//一般创建都是这样的:Weapon w = new Weapon();

这里其实就涉及到多态了,这也是我之前说代码没有写死的原因
此处用父类引用Weapon axe指向子类对象Axe(),因为Axe是Weapon的子类,此时其实发生了一个自动类型转换,具体我也懒得说的,另一篇博客有写。

个人笔记之面向对象--从游戏小DEMO方向了解继承相关推荐

  1. 你们要的Unity联网对战游戏小Demo

    前言 开发3D游戏听起来门槛很高,但是Unity的出现让门槛大大降低.开发联网实时对战的3D游戏门槛就更高,因为即便熟悉掌握了Unity的开发技术,联网的游戏还要涉及到熟悉网络协议栈.掌握后端知识以及 ...

  2. Unity联网对战游戏小Demo

    前言 开发3D游戏听起来门槛很高,但是Unity的出现让门槛大大降低.开发联网实时对战的3D游戏门槛就更高,因为即便熟悉掌握了Unity的开发技术,联网的游戏还要涉及到熟悉网络协议栈.掌握后端知识以及 ...

  3. Windows Socket编程笔记之最简单的小Demo

    Windows Socket编程的大致过程: 服务器端: ----过程-------------对应的API-------  0.初始化         |  WSAStartup()  1.创建So ...

  4. 面向对象编程java小游戏_JavaScript面向对象编程小游戏---贪吃蛇代码实例

    1 面向对象编程思想在程序项目中有着非常明显的优势: 1- 1 代码可读性高.由于继承的存在,即使改变需求,那么维护也只是在局部模块 1-2 维护非常方便并且成本较低. ​2 这个demo是采用了面向 ...

  5. 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo

    简单记录 - Jsoup爬虫入门实战 数据问题?数据库获取,消息队列中获取中,都可以成为数据源,爬虫! 爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 我们经常需要分析HTML网 ...

  6. 入门Leaflet之小Demo

    入门 Leaflet 之小 Demo 写在前面 ---- WebGIS 开发基础之 Leaflet GIS 基本概念:GIS.Map.Layer.Feature.Geometry.Symbol.Dat ...

  7. 接收udp数据_聊聊UDP、TCP和实现一个简单的JAVA UDP小Demo

    最近真的比较忙,很久就想写了,可是一直苦于写点什么,今天脑袋灵光一闪,觉得自己再UDP方面还有些不了解的地方,所以要给自己扫盲. 好了,咱们进入今天的主题,先列一下提纲: 1. UDP是什么,UDP适 ...

  8. Silverlight C# 游戏开发:面向对象在游戏中的实例(一)

    本系列所有代码都是使用Microsoft Visual Studio 2008开发,为基于Silverlight的游戏开发技术,如果您看完之后觉得不错,回复顶一下,万分感激:) 今天,我将带来一个非常 ...

  9. 用Unity做一个小Demo入门Unity

    文章目录 前言 个人介绍 一.准备工作 1. unity下载安装 2. 个人许可证激活 3. 素材下载 二.项目准备 1. 项目创建 2. 素材导入 三.开始项目 1. 将素材变为精灵 2. 将精灵放 ...

最新文章

  1. 手机虚拟摄像头_没键盘也能打字?三星展示最新虚拟键盘Selfie Type:是真的
  2. 2016搜狗:矩阵元素相乘
  3. 从jHiccup开始
  4. 惠普打印机只打印一半_惠普打印机如何安装 惠普打印机加墨方法【介绍】
  5. 【kafka】kafka Kafka分区leader迁移
  6. 右键新建Excel时如何设定其版本即.xlsx转.xls格式
  7. 离职盗取代码、倒卖获利800万,北京西二旗程序员被逮捕
  8. php获取微信uninoid_微信小程序获取openid和unionid方法
  9. 系统学习机器学习之总结(一)--常见分类算法优缺点
  10. ES2015 Proxy 对比 defineProperty
  11. 生鲜配送系统源码功能介绍
  12. 未来影像!华为P30国行版售价曝光:徕卡四摄+超级变焦,3988元起
  13. 如何使用Java实现类似Windows域登录
  14. 视频中场:中视频的复兴与前路
  15. 稠密的无人机激光雷达点云数据处理与分析方法与工具科普系列
  16. Mx Linux 截图工具-shutter
  17. Oracle入门知识
  18. Kubernetes 高级特性集锦
  19. 手把手教你写个微信小程序
  20. 计算机拨号测试在哪,电脑拨号设置在哪里设置

热门文章

  1. 为什么跳转找不到WEB-INF下的jsp文件报404
  2. 历来中国功夫vs泰拳战史
  3. 矩形窗函数的频谱图_【鼎阳硬件智库原创︱频谱分析仪】频谱分析仪应用解惑之带宽...
  4. FPGA笔试问题知识点汇总(61~80)
  5. android8.1 添加物理按键流程
  6. 写一些“北京中新委互联网传媒”的黑历史吧!
  7. 触发点:保护继电器中基于隔离放大器的交流电压测量
  8. 深入浅出Javascript的正则表达式
  9. 移动软件开发五——仿微信发现界面
  10. 图片工具GraphicsMagick的安装配置与基本使用