java 面向对象编程(OOP)-个人理解

来源:互联网 发布:linux ftp文件同步 编辑:程序博客网 时间:2024/06/06 00:55

参考书目《java 核心技术 卷一》

OOP的编程总的分为两大块:
如何操纵 (如:设置访问权限,是否每个实例对象都有一份拷贝副本等)
如何操作 方法(如:静态绑定和动态绑定,他们的区别是使用该方法会有歧义么?需要查对象的方法表么? 如private、static的修饰的类以及构造函数,在编译阶段已经绑定了,没有歧义,不需要查方法表。所以是静态绑定的。而动态绑定是指,同一个对象引用变量,你无法确定它的类型,只有在运行时才能确定。而动态绑定就是多态的实现原理。)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
具体细节:
1 具体的业务,如何设计类的技巧:提取名词作为域(即成员变量)、动词作为方法。原则上,域都设置为private,方法都设置为public.然后根据具体情况,具体改变访问权限
2 类之间的关系有三种:依赖(use-a)、聚合(has-a)、继承(is-a)
3 new Date();是一个表达式,构造了一个对象,返回了一个对象引用。(引用,其实是 对象指针)
为了使得 新建的对象多次使用,需要有对象变量。
Date deadline ,只是个对象变量。

4 一个java源文件只可以有一个public类,可以有多个 其他类。
javac 在编译的时候,每个类生成一个类字节码文件。即使这些类在同一个源文件。

5 new和构造器是相伴出现的。编译器会自动初始化 类的域,即成员变量一定会被初始化。但是,方法中的局部变量就不会了。

6 每一个成员方法,都有隐式参数和显式参数:显式参数很明显的列出了。隐式参数,就是关键字this

7封装:涉及到域更改器(set方法)和域访问器(get方法) (涉及考虑 域)
多态:涉及到 动态绑定。即对象在运行时才能确定所调用的方法。(涉及考虑 方法)
继承:涉及到 Object类,变量屏蔽,超类,子类 ,涉及到super关键字 (涉及考虑
类:域和方法)

8 封装: 注意不要编写 返回值是可变对象的引用的 get方法。

9 同类:A/B,类的对象A甚至是可以可以访问B的私有域的。

10 final修饰 实例域:1 构建对象的时候,必须在构造器完成后,已经给该final实例域初始化了。2 即 这个域不会有 set方法。 3 初始化后,不可以再修改。

11 域分为: static 域 和实例域
实例域分为:final 实例域和普通实例域

static域,在类加载的时候就被初始化了。从此以后,不管有多少该类的对象,却只有一份static域的值
实例域,则根据对象的不同,每人都拥有一份独特的实例域值。
12 静态域 上面已经解释了
静态常量
静态方法,不能向对象实施操作的方法。所以,该方法里面不能有
实例域。因为,没有对象,哪来的实例域啊。只能访问静态域。
13 方法:操作的是 域和对象(所以,一说到方法,我们该想到 它操作了什么域,操作了什么对象)

14 方法:java中所有方法传递参数都只有一种方式传值调用( 即 对参数,进行拷贝一份,传入到方法中)

15 构造器:(涉及到 初始化) 涉及到重载(方法名相同,参数不同,不考虑返回值)
当涉及到有 static 域和方法时,构造器的执行过程

16 super和this关键字区别
super就是个关键字,仅仅是具有 指示的作用
this 则是个引用

17 继承的时候
1 当超类的域 部分或则全部是私有的时候,在子类中必须通过用父类的构造函
数,来初始化这些域。 如:super(n,s,year,month,day )
2 当子类没有显示调用super的时候,编译器会默认调用 父类的无参构造器
3 super(。。。)必须是子类构造器的第一条语句

18 一个对象变量可以指示多种实际类型 这种现象叫多态
在运行时能够自动的选择调用哪个方法 这种现象叫动态绑定

19 动态绑定会带来系统开销,这个系统开销是指 去 查找 方法表。
每一个对象都有一个方法表
19 运行期解析 的意思:就是 通过搜索方法表,确定调用哪个方法的过程。
19 运行时 多态,反射等这些机制
编译时 静态绑定 static final 等这些机制
20 override一个方法的时候,子类方法的可见性不能小于 父类方法的可见性。

21 对象引用 类型转换
1 具体的转成 更抽象的,无限制
2 父类转为子类的话,要做两步:a,用instanceof判断是否能够成功的转换、
b 然后再进行强制类型转换

22 抽象类
一个类即使没有抽象方法,也可以定义为一个abstract类。代价是:该类不可以new实例对象。只能被继承
可以定义抽象类的 对象变量,但是这个变量只能引用 非抽象子类对象
23 抽象类,也是帮助实现 多态的一种方式。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
接口与内部类
24 深拷贝 ,浅拷贝
浅拷贝 ,不同的对象引用依旧引用到 同一个对象
深拷贝 ,不同的对象引用 引用到的是不同的对象。与clone函数有关,实现
Cloneadble接口。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

未完待续

0 0
原创粉丝点击