用吃饭解释什么是面向对象

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34461514/article/details/81191588

我将主要使用吃饭来解释一下什么是面向对象。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!

好了,扯淡完了。有时间我再想想怎么扯点别的

还有,欢迎来访我的博客网站

猜你喜欢

转载自blog.csdn.net/qq_34461514/article/details/81191588