关于面向对象

面向对象

问题

  • 面向对象的好处
  • 学一门技术是否须要趣味性、通俗性的指导

面向对象

什么是对象

  世间任何事物均可以定义为对象。java

什么是类

  类就是把对象的公共属性和方法抽离出来造成集合的抽象,也就是说,类是一种抽象,用来描述对象特征的抽象。编程

什么是实例

  实例就是对象,就比如咱们,就是人这种抽象的一个实例。函数

什么是构造方法

  从字面上来看,构造方法是用来构造对象,当对象正在建立时,会经过构造方法对对象进行初始化。
构造方法的特征:学习

  • 与类同名
  • 无返回值
  • 未定义时,会建立一个默认构造方法

什么是方法重载

  方法重载就是同一个方法,在使用的时候可以根据你参数的类型,从而表现出不一样的行为ui

public class person { public void eat(){ System.out.println("没东西能够给我吃"); } public void eat(Fruit fruit){ System.out.println("我正在吃水果"); } ... }

方法重载提供了函数可扩展的能力,使用时仅需:spa

  • 方法名相同
  • 参数类型或参数个数不一样

面向对象三大特性

封装

优势:设计

  • 松耦合
  • 隐藏类的内部实现
  • 对外部只暴露必要的接口,避免使用者使用非法的操做来改变类对象的内部结构

  一般,咱们在设计一个功能时,老是会把与该功能相似的全部属性和行为都封装在一个类中,这样就能够避免功能内部的行为与别的类产生依赖性,别人使用你的功能时,仅仅须要知道如何调用你的接口来获取想要的信息,不须要理会内部实现究竟是怎么作。
  对于类的内部,通常开发者只提供必要的接口来访问它的内部属性,不会容许你直接操做它的内部,这样作有利于保证使用者是按照设计者的设计逻辑控制使用,避免由于非法使用而致使错误的发生。对象

继承

特色:继承

  • 子类拥有父类非 private 的属性和方法
  • 子类具备本身的属性和方法,能够扩展新的行为
  • 子类还能够重写从父类的行为

优势接口

  • 实现代码复用
  • 方便设计严密的类登记结构体系(树状)

  对象的继承是一种 'is-a' 的关系,若是两个对象 A 和 B ,能够描述为 ‘B 是 A’,则代表 B 能够继承 A。
  继承关系不能简单地理解为父亲和儿子的关系,继承关系其实是一种特殊关系,就比如猫和哺乳动物,猫是哺乳动物的一种特殊抽象,由于它除了具有哺乳动物的特性外,还具有本身独有的个性;好比它会抓老鼠、抓鱼,这些并非哺乳动物的共同特性。
  固然,在设计类的时候,千万不要为了继承而继承,过多的使用继承会使得整个类层次结构变得十分复杂,使得类与类之间的耦合性变强,因此在使用继承的时候千万要理清对象与对象之间的关系;在没有必要选择继承的状况下推荐使用组装。
  固然是否要使用继承,这也得看具体状况,当两个类拥有 ‘is-a’ 的关系,可使用继承;当两个类拥有 'has-a' 的关系,可使用组装。

多态

  多态也叫动态绑定,便是系统在运行时会根据对象的运行时类型,从而表现出不一样的行为
特色:

  • 子类以父类的身份出现
  • 子类在工做时以本身的方式去实现
  • 子类以父类的身份出现时,特有的属性和行为不可使用

  与动态绑定相对的则是静态绑定,C语言编程采用的就是静态绑定。静态绑定是在 编译期进行,也就是说,你的程序在编译的时候,他已经对各个方法的调用的地址已经作了绑定,因此在运行的时候,程序会直接根据你的方法地址去调用具体的方法。
  而向面向对象编程多态采用的则是动态绑定,那么动态绑定他究竟是如何作的呢?程序运行的时候又是如何肯定它的运行时类型从而调用对应的方法的呢?
  以后再详解。

抽象类

特色:

  • 抽象类不能实例化
  • 抽象方法是必须被子类重写的方法
  • 若是类中包含抽象方法,那个该类必需要被定义为抽象类

      抽象类一般表明一个抽象概念,它提供一个继承的出发点,当设计一个新的抽象类时,必定是要用来继承的,因此,在一个以继承关系造成的等级结构里面,树叶节点应当是具体类,而树枝节点应当是抽象类

接口

特色:

  • 接口不能实例化
  • 字段默认都是public static final 类型
  • 只能定义抽象方法

接口和抽象类的区别

  对于初学者来讲,不少人在学习的时候,确定都会有这么一个疑问,接口和抽象类的区别究竟是什么,咱们在设计程序的时候,何时应该用抽象类,何时用接口呢?

那么先来讲说这二者的使用特色的区别:

  • 抽象类能够定义抽象方法,也能够定义基本方法(即本身方法给方法作出实现),而接口只能定义抽象方法
  • 一个类只能继承一个抽象类,但可实现多个接口
  • 子类能够选择只实现部分抽象类的成员(这样子类也是一个抽象类),但必须对接口全部成员进行实现

那么如今就来讲说它们在设计思想上的区别:

  • 类是对对象的抽象;抽象类是对类的抽象;接口是对行为的抽象
  • 若是行为跨越不一样类型的对象(例如飞机、鸟,不是同一类对象,但都有飞行这种行为),可考虑使用接口;若是是对于一些类似的对象(例如猫、狗都属于动物),则考虑抽象出抽象类,让其继承
  • 从设计角度讲,抽象类是对子类公共部分的抽象,而接口根本不知子类的存在,而是预先定义了一套行为

  也就是说,不管是接口、抽象类、类甚至对象,都是在不一样层次、不一样角度进行抽象的结果,它们的共性就是抽象。一般抽象类是对目前一类存在共性的子类的一种泛化,经过抽离出子类间的共同属性和行为,从而进行抽象的一种泛化;而接口则是预先定义了一套有关联的行为,至于谁会实现这套行为,开发者自行决定,而我要作的只是告诉接口的实现类你拥有哪些行为而已。

相关文章
相关标签/搜索