如何理解面对过程和面对对象中的三大基本特征封装、继承、多态

前言

写这些只是为了我自己梳理学习后的理解,通过自己的话来表达我自己的学习结果。

有的浅谈了,有的深谈了一下。有点随心所欲,看看就好。

有问题欢迎指出,一起学习。

面对过程

面对过程是一种思想。C语言就是这种思想。

面对过程的这种思想当中,主要是对   在解决一个问题中,其中解决这个问题的过程是具体如何实现的。

方便理解,我来打个比方,我们晚上要炒菜做饭。

要解决这个问题,我们得先思考如何实现它,或者说实现这个问题的过程是什么。

那么如何实现做饭,我们可以分为这四步骤:

1.我们要去超市中买菜。

2.我们要回家把菜洗干净。

3.我们要把洗好的菜放入锅中进行翻炒。

4.把炒好的菜用盘子呈上来。

完成这四个步骤,整个做饭,这个问题我们就解决了。

用Java代码可以这样展示

public class HowToCook {
    public static void main(String[] args) {
        //第一步
        buyVegetables();
        //第二步
        washVegetables();
        //第三步
        fryVegetables();
        //第四步
        dishOutVegetables();
        //完成
        System.out.println("完成做饭");
        

    }
    public static void buyVegetables(){
        System.out.println("我们要去超市中买菜。");
    }
    public static void washVegetables(){
        System.out.println("我们要回家把菜洗干净。");
    }
    public static void fryVegetables(){
        System.out.println("我们要把洗好的菜放入锅中进行翻炒");
    }
    public static void dishOutVegetables(){
        System.out.println("把炒好的菜用盘子呈上来。");
    }
}

代码输出结果: 

我们要去超市中买菜。
我们要回家把菜洗干净。
我们要把洗好的菜放入锅中进行翻炒
把炒好的菜用盘子呈上来。
完成做饭

Process finished with exit code 0

面对对象

面对对象是一种思想。Java就是这种思想。

面对对象这种思想中,主要是对   在解决一个问题中,其中解决这个问题是找谁解决,而不是考虑如何解决这个问题(换句话说就是解决这个问题的过程具体是什么)

还是用刚刚做饭的例子:

如何解决做饭这个问题呢,可以联想到现实生活中,晚上我们是谁做的饭呢。就我家是我老爸做的饭。所以我们可以找他来解决这个问题。

代码实现如下:

从这段代码中我们是不是看不到,具体实现的过程是怎么样子的呢。

只看到了创建了一个father对象,并调用了makeVegetables方法。那么结果是不是和刚才一样呢?

public class HowToCook {
    public static void main(String[] args) {
        //爸爸叫来,告诉爸爸,今晚你来做饭。
        Father father=new Father();
        //爸爸来做饭。
        father.makeVegetables();
    }
}

那Father类中就是解决该方法的具体过程了。我们来看看代码是怎么样子的。

public class Father {
    public static void makeVegetables() {
        buyVegetables();
        washVegetables();
        fryVegetables();
        dishOutVegetables();
    }

    public static void buyVegetables(){
        System.out.println("我们要去超市中买菜。");
    }
    public static void washVegetables(){
        System.out.println("我们要回家把菜洗干净。");
    }
    public static void fryVegetables(){
        System.out.println("我们要把洗好的菜放入锅中进行翻炒");
    }
    public static void dishOutVegetables(){
        System.out.println("把炒好的菜用盘子呈上来。");
    }
}

那么结果是不是和刚刚的一样呢?显而易见是一样的。

而在这个过程就体现了面对对象的封装特征:不需要考虑如何解决问题的过程,而是考虑找谁来解决这个问题。

我们要去超市中买菜。
我们要回家把菜洗干净。
我们要把洗好的菜放入锅中进行翻炒
把炒好的菜用盘子呈上来。

Process finished with exit code 0

封装

官方概念:指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。

听起来很模糊,看看刚刚的案例。应该就不难理解了,我就不再重复举例了。

通过刚刚的例子,就能理解封装的思想是什么了。至于官方概念中的接口之类的,我属实打到这里不想打字了,就不深入讲解了。

继承

官方概念:继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

比如我们的父亲有

两只手、两条腿、一个鼻子、一张嘴。(属性)

会吃饭、会喝水、会拿快递、会打嘴。(行为)

【其中的打嘴,是指儿子犯了错误,父亲扇嘴巴的行为。

自己突然灵感而发的打油诗,不要深究含义,仅仅方便大家记忆。】

那我们自己的身体是不是也具备同样的属性呢?

那我们自己是不是也会做这些行为呢?

答案也是肯定的。

那么父亲会的,我们也会,那么我们可以说这些是我们从父亲那里继承而来的。

多态

官方概念:相同的消息给予不同的对象会引发不同的动作。(或者说同一种行为,在不同对象中的不同实现。)

那么这些行为当中,父亲所做的行为和我们做这些做这些事情的是不是完全一样呢?

那不一定,比如

父亲吃饭用筷子;我们吃饭用勺子。

父亲喝水双手捧着杯子喝水;我们比较帅,单手拿着杯子喝水。

那么这些同一种行为,在我和父亲身上的不同展现,就是多态。

其中分为重写式多态和重载式多态。

官方概念:重写:子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。

条件必须存在继承关系。而且参数列表与被重写方法的参数列表必须完全相同。

例子:而重写就是刚刚的例子,我们继承了父亲的行为,所做出的不同的实现。

官方概念:重载:在一个类里面,方法名字相同,而参数不同。

如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。

条件必须条件方法名相同。满足必须条件的同时必须满足以下条件一个及以上

  • 方法的参数类型,参数个不一样
  • 方法的返回类型可以不相同
  • 方法的修饰符可以不相同 
  • 额外说明:main 方法也可以被重载

例子:我们实现做饭这个行为:我们放一个鸡蛋去抄,和我们放番茄+鸡蛋去炒。是不是不一样?

而这就是重载的一种。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coca可口

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值