java 对象导论
1.抽象过程
所有编程语言都提供抽象机制。可以认为,人们所能够解决的问题的复杂性直接取决于抽象的类型和质量,所谓的'类型'是指“所抽象的是什么?”汇编语言是对底层机器的轻微抽象。
java的基本 特性:
(1) 万物皆为对象
(2) 程序是对象的集合,它们通过发送消息来告知彼此所要做的
(3) 每个对象都有自己的由其他对象所构成的存储
换句话说,可以通过创建包含现有对象的包的方式来创建新类型的对象
(4) 每个对象都拥有其类型
(5) 某一特定类型的所有对象都可以接收同样的消息
2.每个对象都提供服务
当试图开发或理解一个程序设计时,最好的办法之一就是将对象想象为"服务提供者"。程序本身将向用户提供服务,此外程序还将通过调用其他对象提供的服务来实现这一个目的
3.被隐藏的具体实现(java中的四种访问权限)
(1) public
public 修饰的元素任何人都可以访问
(2) private
private 修饰的元素只能类的创建者和类的内部方法可以访问
(3) protected
protected 和 private 的作用差不多,区别在于类的继承者能访问protected 元素不能访问Private 元素,并且同一个包下的元素也能访问
(4) 默认访问权限
当没有使用任何一种元素修饰时,就是默认访问权限,这种也被称为包级别访问权限,即可以访问同一个包下的元素
4.复用具体实现
代码复用是面向对象程序设计语言所提供的的最了不起的优点之一
最简单的复用某个类的方式就是直接使用这个类的一个对象,此外也可以将这个类的一个对象置于其他新的类里面。新的类可以由任意数量、任意类型的其他对象以任意可以实现新的类中想要的功能的方式所组成,因为是在使用现有的类合成新的类,所以这种也被称为"组合",如果组合是动态发生的,那么这种则被称为"聚合",组合经常被称为 "has-a" (拥有)关系,就像常说的汽车拥有引擎一样。
5.继承
对于继承可能引发某种争论:继承应该只覆盖基类的方法吗?如果这样做,意味着基类和导出类是完全相同的类型。结果可以用一个导出类对象完全替代基类对象,这可以被视为纯粹替代,通常称之为替代原则。在某种意义上这是处理继承的一种理想方式,这种关系经常被理解为 " is -a " 关系。
有时必须在导出类中添加新的接口元素,这样也就扩展了接口,这个新的类型仍然可以替代基类,但是这种替代并不完美,因为基类无法访问新添加的方法,这种情况我们通常描述为 " is - like- a " 关系。
6.伴随多态的可互换对象
程序绑定的概念:绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来,对java来说,绑定分为静态绑定(前期绑定)和动态绑定(后期绑定)
静态绑定:在程序执行前方法已经被绑定(也就是说在编译过程中就已经知道这个方法到底是哪个类的方法),此时由编译器或其他连接程序实现,针对java可以简单的理解为程序编译期的绑定。java中的方法只有 final、static、private和构造方法是前期绑定
private:private方法不能被继承,既然不能被继承就不能通过它子类的对象来调用,而只能通过这个类自身的对象来调用。因此可以说private方法和定义这个方法的类绑定在了一起
final:final方法虽然可以被继承,但不能被重写,虽然子类对象可以调用,但是调用的都是父类中的方法(由此可以推断出将方法声明为final类型,一是为了防止覆盖,一是为了防止动态绑定)
构造方法:构造方法也是不能被继承(网上说子类无条件的继承父类无参数构造函数作为自己的构造函数,不过我个人认为这个说法不太恰当,我们知道子类是通过super()来调用父类的无参构造方法,来完成对父类的初始化,
而我们使用从父类继承过来的方法是不用这样做的,因此不应该说子类继承父类的构造方法),因此编译时也可以知道这个构造方法到底属于哪个类
动态绑定:在运行时根据具体对象的类型进行绑定。若一种语言实现了动态绑定,同时必须提供一些机制,可以在运行期间判断对象的类型,并分别调用适当的方法。也就是说编译器此时依然不知道对象的类型,但方法调用机制能自己去调查,找到正确的方法主体,不同的语言对对后期绑定的实现方法是有所区别的
动态绑定的过程:
1、虚拟机提取对象的实际类型的方法表
2、虚拟机搜索方法签名
3、调用方法
7.单根继承结构
在java中(事实上是包括除了C++以外的所有OOP语言),所有的类最终都集成自单一的基类。这个类的名字就是Object。
-------------
文中部分内容素材来自 https://www.cnblogs.com/jstarseven/articles/4631586.html