面向对象

谈谈你对面向对象的理解:

  封装、继承、多态(设计模式)

  从面向对象的思想开始谈起

  用语言作为载体在谈面向对象(Java),对象和类的一些关系。

  语法简单的过一下,像一些关键字的使用神马的就不要提了

  然后说设计上的一些个人理解,说的是特性,实际点在抽象上要着重

  围绕多态进行深入,切近设计模式就可以不出来了,各种吹

  面向对象可以应用在方方面面。

三大特性:封装、继承、多态

  封装:

    理解:

        开车时,需要知道发动机要怎样运转?(汽车的抽象堪称经典)

        开飞机时,需要自己去转动螺旋桨嘛?

    思想:高内聚(可以通过封装体现),低耦合

    宗旨:

      尽量降低对外的暴露

      做一个低调的人

    权限修饰符:public(公开、工程内)、protected(保护、一个体现内,继承)、默认(包内)、private(私有的,一个类内)。修饰熟悉、方法、类、构造器。

    语法:借助于权限修饰符适当的隐藏属性和方法

        这是封装作用的访问,属性(包括静态)&方法(包括静态)

        作用范围还包括内部类,构造器

        使用的手段,或者方法是用的权限修饰符(public,private等)

    思想:高内聚低耦合

        这是为什么有封装的主因,不能为了封装而封装

        而这个思想,不仅仅是针对面向对象,任何软件,工程设计都如此

        只是在面向对象的设计思想中,为了做到高内聚而选择一种设计

        这个设计,就是我们学习的封装特性,这个特性是面向对象的,不是Java的

    user.name=""; 和user.setName的区别?(

使用get()和set()而不使用public的成员变量,是因为我们设计类的时候要遵循这样的原则: 提供类的人要尽量将类中有什么隐藏起来,只告诉使用者你能做什么 使用类的人不关心你的类中有什么,只关心类提供了什么功能 所以设计类的时候要尽量不提供public的成员变量,最好一个都没有,只提供接口 这条原则其实不仅是代码规范的问题,放到工作中,这就是多项目组或多部门之间合作的准则 这条原则也绝对不是某个独自编码的程序狼一拍脑袋就想出来,这是经历过有组织开发过工作的程序猿才能设计出来的。)

    思考:封装后的属性能被子类继承嘛?

    面试:

      在日常中开发中你觉得封装有哪些体现?getter&setter

      你是怎么用封装的?无需对外暴露的方法即可私有化

      你用封装做过哪些设计?静态工厂方法 of()

      还有嘛?比如单例工厂?设计模式?

   

  继承extends(单继承、多层继承): 现象(代码复用、方便扩展),思想是面向对象思想。

    super关键字:指向父类的指针、在子类中,调用父类的方法、属性、构造器;

            语法:super.name,super.run(),super(jim,23)

           super的查找顺序是找自己的直接父类

           super调用父类构造器,必现在首行。

  多态:

    理解:一个事务的多种形态。通俗理解:日常生活之我要来个人帮帮我(人是个抽象的,不存在的,具体执行的过程中具体是谁)

    现象:将子类的实例化结果指向父类的引用Person person= new Sum();

    注意:多态是针对方法,不是属性。

private static void run(Car car){
     soutv(car.brand+car.name);      
}
View Code

    obj instanceof class

    总结:面向抽象编程、面向模板编程(抽象类)、面向规范编程(接口)。

     

    

抽象类abstract:不能实例化,抽象方法不能有实现。

    子类继承抽象类的父类,必现实现抽象方法。

接口:

  定义:

    接口是对类的一组需求描述

    接口所描述的方法不能有实现

    接口所描述的方法都是public,不写默认也是public

    接口的继承叫实现,使用关键字implements

  特性:

    接口不是类,不能进行实例化(new)

    接口允许多实现,使用逗号分开

多态总结:

  什么时候用接口,什么时候用抽象类?接口是个规范,抽象类是个模板(一个大框架,有些行为的)

原文地址:https://www.cnblogs.com/wangkc/p/12515705.html