面向对象
谈谈你对面向对象的理解:
封装、继承、多态(设计模式)
从面向对象的思想开始谈起
用语言作为载体在谈面向对象(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); }
obj instanceof class
总结:面向抽象编程、面向模板编程(抽象类)、面向规范编程(接口)。
抽象类abstract:不能实例化,抽象方法不能有实现。
子类继承抽象类的父类,必现实现抽象方法。
接口:
定义:
接口是对类的一组需求描述
接口所描述的方法不能有实现
接口所描述的方法都是public,不写默认也是public
接口的继承叫实现,使用关键字implements
特性:
接口不是类,不能进行实例化(new)
接口允许多实现,使用逗号分开
多态总结:
什么时候用接口,什么时候用抽象类?接口是个规范,抽象类是个模板(一个大框架,有些行为的)