一、前言

拜读了thinking in java,结合了解的一些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

 

你可能感兴趣的:(一、前言)