我将主要使用吃饭来解释一下什么是面向对象。Yeah,这是一篇主要面向萌新的博客。老油条也请看下帮我指正错误,我也将用以下理论跟我的面试官讲什么是面向对象。Alright,后者是写它的主要原因。代码注释使用英文,为什么?嗯, Yes,我偷偷上了补习班
提示:这不是 Java 教程,学 Java 请用正规途径。 Ok, It’ time to show!↓↓↓
现实世界里的所有事物都是一个
实体
,同一类型的实体具有相同类型的属性
。
比如人的高低、胖瘦等的属性
,这些都被封装
到了人这个类
群。人有一些未解的、不愿透露的私有属性
(基因、小 X 片、思维等),可以自己使用,但不能被外界获取
class Human {
// Attributes
int height, weight;
// Private Attributes
private Gene gene;
private Mind mind;
// ...
}
人有走路、吃饭等很多行为 ,这里称作函数
或方法
。上帝创造人的时候会想:人应该是个什么样的东西?…嗯!人会吃饭、会睡觉、会繁殖……上帝这里在描述一个完全抽象的(接口
)人的概念定义的东西,他指明人应该有的东西,并没有说每种方法
具体怎么干。当上帝指明人应该用两条腿来走路,用手来吃饭…这时候人的各种方法被实现
,原始人诞生了!
interface AbstractHuman {
// ...
public Evacuation haveMeal(Meal meal);
public void walk();
// ...
}
public class PrimitiveHuman implements AbstractHuman {
// ...
@Override
public Evacuation haveMeal(Meal meal){
// Use hands to have meal
}
@Override
public void walk(){
// Use legs to walk
}
// ...
}
现代人重写
了吃饭的方法——吃前先把食物搞熟。而如今中国人使用筷子吃饭,美国人使用刀叉吃饭,这是中国人、美国人这两个继承
于人的两个子类
对于吃法方法的重载
。而使用筷子夹菜的技能是中国人在现代人这个父类
的基础上续写新的私有方法
。中国人吃饭方法所需参数
数量比原始人多,标志人类社会向着多态
的方向发展
public class ModernHuman extends PrimitiveHuman {
// ...
@Override
public Evacuation haveMeal(Meal meal) {
// Cookie or Steam or ... food
// Eat meal
}
// ...
}
public class Chinese extends ModernHuman {
// ...
public Evacuation haveMeal(Meal meal, Chopsticks sticks) {
// Get food from UseChopsticks method
Food f = PickFoodWithChopsticks(meal);
// Eat meal
}
private Food useChopsticks(Meal meal, Chopsticks sticks) {
// Pick pieces from mesal with chopsticks
}
// ...
}
一个中国人,是一个中国人,也是一个人,这个人分别是中国人和人的一个对象
(称之为单位应该更好理解)
一个中国人自然会用筷子吃饭。但以一个外星人(编辑器)的角度,一个人它可能是中国人也可能是美国人,这个人会不会用筷子吃饭不能确定。如果确定了一个人是中国人,将其向下转型
为中国人,外星人就不会不明白(警告)了。但是有危险,万一把一个美国人转型成了中国人,外星人看他不会用筷子而大怒的(报错)后果很严重(程序终止)。而所有的人都可以向上转型
看做是人
Meal meal = new Meal();
Chopsticks sticks = new Chopsticks();
// Define a Human name Peter_li, Actually he also is a Chinese
Huamn peterLi= new Chinese(); // Transform peterLi to Human, it's absolute safe
Chinese peterLi = (Chinese)peterLi; // Transform peterLi to Chinese, it's safe
peterLi.haveMeal(meal, sticks); // √ He can use chopsticks
// Define a Human name Rose, She can't use sticks
Human rose= new American(); // Transform rose to Human, it's absolute safe too
Chinese roes = (Chinese)rose; // Transform rose to Chinese, it's WRONG WRONG!
好了,扯淡完了。有时间我再想想怎么扯点别的
还有,欢迎来访我的博客网站