java编程思想笔记(一)对象导论

1.万物皆对象,现实中的(狗,建筑物,服务等),都可以转为JAVA中的对象(类),因为类描述了具有相同特性(成员变量)和行为(方法或功能)的对象集合,所以一个类实际上也是个数据类型。

 

每个对象都有个接口(如下图)。

灯的接口定义 开,关,调亮,调暗的方法,创建新类即可具体实现该接口。

对象的引用“lt”

Light lt = new Light();

lt.on();


 

 

2.Java中的4种访问制权限(被隐藏的具体实现):

(1).public:最大访问控制权限,对所有的类都可见。

(2).protect:同一包可见,不在同一个包的所有子类也可见。

(3).default:包访问权限,即同一个包中的类可以可见。默认不显式指定访问控制权限时就是default包访问控制权限。

(4).private:最严格俄访问控制权限,仅该类本身可见,对外一切类都不可以访问(反射机制可以访问)。

 

3.面向对象编程中两种对象组合方式——is-a 和 has-a:

(1).is-a组合:一个类继承具有相似功能的另一个类,根据需要在所继承的类基础上进行扩展。

优点:具有共同属性和方法的类可以将共享信息抽象到父类中,增强代码复用性,同时也是多态的基础。

缺点:子类中扩展的部分对父类不可见,另外如果共性比较少的时候使用继承会增加冗余代码。

 

(2).has-a组合:has-a组合是在一个类中引用另一个类作为其成员变量。

如新的类:汽车,可以有引擎,方向盘,轮胎等组合,电脑主板由CPU,内存卡,显卡来组合。

优点:可扩展性和灵活性高。在对象组合关系中应优先考虑has-a组合关系。

缺点:具有共性的类之间看不到派生关系。

 

4.继承

当一个新类与原有的类相似,可以让新类继承于原有的类,原有的类就是父类(基类),新类为子类(导出类), 子类可以加新方法,也可以覆盖重写父类的方法,高拓展性,高灵活度。如果子类只是继承而不做任何操作,那就跟父类没任何区别,子类就没什么意义。

 

如下图  

35 几何(shape)为父类,有几何图形共有的属性尺寸,颜色,位置等,还可以被绘制,擦除等。

圆形,长方形,三角形都可继承shape,同时也拥有了父类的属性和方法,三角形还增添了垂直翻转的新方法。

36 还可重写draw()和erase();


 

5.多态:

在面向对象编程中,子类中拥有和父类相同方法签名的方法称为子类方法覆盖父类方法,当调用子类方法的某个操作时,不必明确知道子类的具体类型,只需要将子类类型看作是父类的引用调用其操作方法,在运行时,JVM会根据引用对象的具体子类类型而调用应该的方法,这就是多态。

多态的基础是java面向对象编程的晚绑定机制。编程中有如下两种绑定机制:

(1).早绑定:一般在非面向对象编程语言中使用,在程序编译时即计算出具体调用方法体的内存地址。

(2).晚绑定:面向对象编程语言中经常使用,在程序编译时无法计算出具体调用方法体的内存地址,只进行方法参数类型和返回值类型的校验,在运行时才能确定具体要调用方法体的内存地址。


  

 

6 .java单继承的优点:

相比于C++的多继承,java只支持类的单继承,java中的所有类的共同基类是Object类,Object类java类树的唯一根节点,这种单继承有以下好处:

(1).单继承可以确保所有的对象拥有某种共同的特性,这样对于JVM虚拟机对所有的类进行系统级的操作将提供方便,所有的java对象可以方便地在内存堆栈中创建,传递参数也变的更加方便简单。

(2).java的单继承使得实现垃圾回收器功能更加容易,因为可以确保JVM知道所有对象的类型信息。

 

7.选择容器对象两个原则(指JAVA中的集合或数据结构):

 (1).容器所能提供不同的类型的接口和外部行为是否能够满足需求。

(2).不同容器针对不同的操作效率不同。

所以 按需选择适合的高性能容器(前提是知道集合的内部各项功能的性能)

 

 8.类型转换:

Java中有两种常见的类型转换:向上类型转换(upcast)和向下类型转换(downcast):

(1).向上类型转换(upcast):

向上类型转换是将子类对象强制类型转换为父类类型,经典用法是面向对象的多态特性。向上类型转换时,子类对象的特性将不可见,只有子类从父类继承的特性仍然保持可见,向上类型转换时编译器会自动检查是否类型兼容,通常是安全的。

(2).向下类型转换:

向下类型转换是将父类类型强制转换为子类类型,转换过后父类中不可见的子类特性又恢复可见性,向下类型转换时,编译器无法自动检测是否类型兼容,往往会产生类型转换错误的运行时异常,通常不安全。

 

 

 

猜你喜欢

转载自201601175907.iteye.com/blog/2359394