Object-oriented programming OOP 面向对象编程
Abstractions 抽象类
Unified Modeling Language UML 统一模型语言
一个好的面向对象的设计中,每一个对象做好一件事足以,而非尝试去解决太多。
尝试去把对象看作是一个服务提供者是一个非常简化的工具。
Static
当声明一个事物是static时,意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。所以,即使从未创建某个类的任何对象,也可以调用其static方法或访问其static域。
----你可以直接通过类名访问类中的static方法以及static域【static声明的类和方法只分配一份存储空间,不会因为对象声明的增加而增加,共享--easy access to the static function and static parameters】
static 方法就是没有this的方法
继承
base class A B extends A C extends B
在创建C的实例的时候constructor的调用顺序 :A->B->C
先找到C的根源而后依次按照继承的顺序调用constructor function---在base class中实现对类变量的初始化工作的重要意义
组合combination 匿名类
在一个Class.java文件中只能存在一个和Class同名的对外界设置访问权限的类,其他剩余在文件中的类被称作是匿名类【无法通过import来实现对匿名类的调用,匿名类的作用域只是存在于其所在的文件范围内的类中(岂不是一个内部实现具体操作细节的方法?)】
Final
final一般的、常用的作用对象是Java提供的几种最基本的数据类型,该关键字的作用莫过于保证所声明的数据的值是一个常亮、在程序运行中不会发生改变。
如果声明一个对象实例为final,其实这说明不了什么:只能保证该对象实例所指向的那块内存的值不会发审改变,具体的该结构内部的参数值的改变是无法操控的,所以这样的声明其实是没有什么意义的。
final类,表明不打算继承该类,而且也不允许别人继承该类;
多态
多态--后期动态绑定:继承关系--A -> B ->C -> D,ABCD四个类中都写有test() , A aB = new B(); aB.test() --->aB调用的test()是A中还是B中的test(),看似是一个值得商榷的问题,但实则不然。Java的后期动态绑定机制会自动解决这个问题,声明的aB是一个A的对象,但是实则用的是B类的构造器生成的B的对象,在解释、运行该代码的时候看的实则是aB的实际对象类型。所以,aB.test()的调用就是B类里面的test().
向上转型----数据类型只能是从宽往窄的方向进行转型【能够舍弃部分,但却不能多包含一些额外的部分】
抽象方法 abstract
abstract void f() --只有声明 没有方法体
多重继承---一个类implements很多个interface