工作了些时候,用的java语言,看了下thinking in java ,特在此记录和分享些自己的理解。
一、关于程序设计,就是对于复杂性的管理
关于复杂性,可以认为有两个方面的考虑:待解决问题的复杂性, 解决该问题工具的复杂性。待解决的问题,程序员不好把控,而解决的工具,就是编程语言。
二、关于java是完全面向对象的语言
1.java完全面向对象,需要以“类”级别才能独立存在,比如方法,是不能独立存在的,一个方法总会要属于一个类。
这个“类”级别,并不完全是class, interface,enum也是“类”级别。
对于“类”级别的存在,可以理解成一个一个人, 有人的地方就有江湖,有类的地方类之间就可能有关联,对于这种关联,比较好的一种理解方式是“把类看成服务者”(同时也是别的类的“被服务者”)。这种关系从小了看就是A类调用B类的方法, 从大了看也可以是某一个系统调用另一个系统提供的接口。
2.关于完全面向对象,就必须考虑代码复用的问题,java中对于复用的解决方式有两种:组合和继承。
组合:汽车拥有引擎,不必在汽车里面自己写引擎如何实现,而是调用引擎类,放到汽车类里面即可;继承之后再讲。
对于设计来说,一般是优先使用组合避免过多使用继承的原则。(虽然继承是java最重要的特性之一)
3.关于继承,简单的讲就是extends,A extends B ,那么A就拥有B中的所有元素,这样才写代码的时候就可以避免一些属性过多的重复写。
4.关于多态,常见的场景如下:
1 class Animal { 2 3 public void f(){} 4 } 5 6 class Fish extends Animal { 7 @Override 8 public void f() {} 9 } 10 11 class Dog extends Animal { 12 @Override 13 public void f() {} 14 } 15 16 public class Test { 17 public static void main(String[] args) { 18 Animal animal = new Fish(); 19 animal.f(); 20 } 21 }
注意声明animal这里,父类声明指向子类对象, 可以把Fish换成Dog,其他地方不变,执行f()方法的时候系统会自动判别f()方法所述的对象,动态绑定到底是运行Fish中的f(),还是运行Dog中的f()。这个就是多态。
三、java中的四个特征:抽象、封装、继承、多态
参考二中的内容,把“类看成服务者”的范畴,对应的就是抽象和封装---level1
为了减少代码重复设计出来的父子关系,对应的就是继承--------------level2
在继承的基础上能够动态判定执行的方法,对应的就是多态------------level3