物件导向
这单元主要是让大家了解物件导向的基本实作
物件导向有三大特性:
封装
类别的内部成员可以封装起来,让别人不知道其如何实作,只能透过它提供的公开类别成员来进行操作,封装的观念和抽象化类似,但多了安全的概念,使用者只能使用公开的属性或方法,不可以直接存取类别私有的属性或方法。
要存取类别私有的属性或方法,需透过类别公开的方法,而设计师可在这些公开的方法中先做安全性检查。
例如:一台电视,只要能看就好,使用者不需知道其构造和原理,透过电视的面板或摇控器来进行操作如果电视没有封装,使用者看电视时会许就得自己把电线找出来接在一起 ⇒ 操作复杂且不安全
继承
继承让程序码可以重复使用。就以车子、汽车与卡车的例子来说吧。我们把大部分重复的程序码写在车子的类别里,以後的十种汽车跟八种卡车都可以直接享用车子中已经定义好的程序码与功能。我们因此缩短了浪费在重复性工作上的时间。
简单的来说:可以让物件继承其他物件具有的属性与行为
多型
多型跟继承有很大的关系,以老鹰与企鹅来比喻:
老鹰与企鹅都是继承鸟纲但是两者最快速移动方式
老鹰是飞翔,企鹅是游泳,他们都继承鸟类所有继承特徵与行为,但移动的行为老鹰是在天上飞最快,企鹅在海里游最快,同样都是移动,但行为不同,结果一样这就是多型
。
一、物件继承范例
创建三个元件,分别为Creature、Villager、Monster
有没有发现到Villager与Monster的class後都有继承Creature
Creature
class Creature
{
private int hp = 100;
public int GetHP()
{
return hp;
}
public void Injured(int injuredPoint)
{
hp -= injuredPoint;
}
}
Villager
class Villager : Creature
{
public String Talk()
{
return "Hello World";
}
}
Monster
class Monster : Creature
{
public int attack()
{
return 10;
}
}
Form
创建Villager与Monster的新物件
试着呼叫b.GetHP()
,却能得到100的值,但是Monster
里没有GetHP()
这个function,为什麽可以呼叫到Creature
里的function,答案是因为Monster
继承了Creature
。
我将b.attack的值,塞入a.Injured
hp预设为100,将10塞入Injured,hp = 100 - 10
因此return出来的值就为90。
private void submit_Click(object sender, EventArgs e)
{
Villager a = new Villager();
Monster b = new Monster();
a.Injured(b.attack());
MessageBox.Show("" + b.GetHP()); //100
MessageBox.Show("" + a.GetHP()); //90
}
>>: [Day 36] 自我介绍後台及前台(五) - 前台的自我介绍页
疫情後,公司调整部份员工仍维持远距工作,但开放员工外网连线容易让内网出现资安漏洞 如何确保员工在公...
引言 不好意思,作者总是有说不完的序言! 「机派X」的由来源自於无人机的机、树莓派的派还有 Linu...
大家好! 昨天我们成功使用建构式建立一个新物件。 今天我们要实作的就是,在物件原型中新增共用方法。 ...
今日目标 键盘滑鼠输入 GLFW Input Callback 第一篇的时候,有简单的介绍glfw管...
#odoo #开源系统 #数位赋能 #E化自主 当我们建立odoo资料库,首次安装我们想要的模组後,...