面向对象的三大基本特征

        先说说什么是面向对象? 谈谈你对面向对象的理解

        面向对象是一种编程思想。聊到面向对象,我们需要聊一下面向过程的编程方式,因为面向对象是从面向过程过渡而来的。

举个例子:

        如果是面向过程的话,我们会将这个洗衣服任务拆解成一系列的步骤,每一个步骤就是一个函数。

       1)打开洗衣机;

        2)放衣服和洗衣液;

        3)选择洗衣模式,开始洗衣;

        4)等待洗完,拿出衣服。

        如果是面向对象的编程方式,我们会拆分成人和洗衣机两个对象,再分析每一个对象,它需要做哪些事情。

        人在其中需要做这三件事:

        1)打开洗衣机

        2)放衣服和洗衣液

        3)洗完衣服后拿出衣服。

        洗衣机在其中只需要做一件事情:

        根据洗衣模式洗衣服。

面相过程的思维方式,它更加注重这个事情的每一个步骤以及顺序。他比较直接高效,需要做什么可以直接开始干。

面向对象的思维方式,它更加注重事情有哪些参与者,需求里面有哪些对象,这些对象各自需要做些什么事情。将其拆解成一个个模块和对象,这样会更易于维护和拓展。

面向对象三大基本特性:封装,继承,多态

一、封装

        就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

        一个对象他所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作,封装就是把一个对象的属性私有化,同时提供一些可以被外界访问属性的方法。

三大好处

1)良好的封装能减少耦合
2)类内部的结构可以自由修改
3)可以对成员变量更精确的控制,隐藏信息,实现等细节

二、继承

1.在 Java 中子类使用关键词 extend 去继承父类的关系。

继承主要用途是将子类存在共性的东西,把它抽取出来放到父类里面,比如将共同拥有的属性和方法抽取出来放到父类里面。

2.继承的好处

想要使用这些属性和方法的时候,可以直接去使用父类的,而不需要自己再重新去定义,更大程度的实现代码复用。

我们不需要写很多的冗余的代码,把共性的全部抽到父类,可以直接调用,如果需要个性化自定义子类的方法时,去重写父类的方法即可。

三、多态

1.不同类的对象对同一消息作出不同的响应叫做多态,就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

2.多态存在的三个条件

有继承关系
子类重写了父类方法
父类引用指向子类对象

3.注意:
        因为多态存在必须要有“子类重写父类方法”这个条件,那么下面类型的方法没办法表现出多态的特性(因为不能被重写)
        static方法:static修饰的方法是属于类的,而不属于实例;
        final方法:因为被final修饰的方法无法被子类重写;
        private方法:被private修饰的发那个法对子类不可见;
        protected方法:被protected修饰的方法可以被子类见到,也可以被重写,但无法被外部所引用,无法引用,就没有多态。

4.多态的分类:

编译时多态,方法的重载
运行时多态,方法的重写

5.多态问题的几条原则

        比如有一个父类Father,有一个子类Children

(1)向上转型是自动的。Father f=new Children()是自动的,不需要强转

(2)向下转型要强转。即Children c=new Father()是无法编译通过的,必须要Children c=(Children)new Father(),让父类知道它要转成具体哪个子类

(3)父类引用指向子类对象,子类重写了父类的方法,调用父类的方法,实际调用的是子类重写了父类的该方法。

即 Father f=new Children(),f.toString()实际上调用的是Children中的toString()方法。

你可能感兴趣的:(基础知识,java)