Java基础系列--- 什么是面向对象

 

面向对象的特征有3个,封装、继承、多态。至于抽象的话,个人认为,应该是前面3大特征中都有抽象的思想,毕竟面向对象本身就是一种抽象。

比如 子类 extends 父类,子类到父类就是抽象,具体的类抽象为公共的。接口同样的道理。

明白了3大特征,我们就具体来讲解下:

l  封装

n  是对象和类的主要概念,把具体的某一个事物抽象成我们代码中的某一个类,并且这个类是有自己内部私有的方法,不让外部随意的访问,当然。也有公共的方法让外部访问。

l  继承

n  OOP中的一大特点就是继承,它的特性就是在不改变父类的基础上可以添加额外的功能,对父类进行了拓展。

n  OOP语言中,一个类可以继承多个父类,在Java中,这样是不可取的。但是在一些情况下我们是需要多重继承的特性的,所以有了折中的方法:接口和内部类,接口在下面讲,我们这里先讲内部类。

 

 

一个父亲类,有一个获取Name的方法

 

一个母亲类,也有一个获取Name的方法

 


一个孩子类,有2个内部类,实现了多重继承。

 

注意:在使用继承的时候,要注意子类属于父类,父类发生改变,相应的子类也会发生改变。

n  接口继承

 

这里是一个User接口,

 

 

OldUser 继承了User

 

 

OldUser的子类必须实现OldUserUser的所有方法

l  接口

n  介绍完了继承,接口其实差不多,只不过是要强制子类实现父类的方法,至于子类的具体细节,父类完全不关心

一个User 接口类

 

一个普通的Work 类,有doWork方法

 

有一个Man类,实现User 并且继承Work

至于多重继承,在接口中其实是这样

 

可以实现多个接口,当然List接口中的方法User1也要全部实现才行

l  多态

n  第一种多态性就是指可以将子类类型的指针赋值给父类类型,比如

 或者是在调用的时候

 


我们的参数是一个List,但是可以给pringList()传入List的子类

n  第二种就是我们上面继承中用到的覆盖

u  覆盖就是子类覆盖父类的方法,重新定义具体实现,比如上面的doWork(),上面有一个@Override,代表了重写

u  重载指的是方法名相同,但是参数不同。比如我们经常用到的有参构造函数和无参构造函数

l  But,注意,中文的重载对应的英文是override, overload overwriteoverwrite后来被慢慢改成重写。其中只有override是多态的特性,overload重载是构造函数的体现,但不是多态的体现,至于最后一种 overwrite 只能说是子类改写了父类的方法,只是方法名相同而已

n  至于多态的作用呢,是可替换,灵活,便于拓展

 


 

五大设计原则:单一功能、开闭原则、里氏替换、接口隔离以及依赖反转

l  单一功能 :认为对象应该仅具有一种单一功能的概念。或者可以说是一个类只关心一件事,比如User类,只关心用户有关的事情。专人做专事。之所以这样是因为,如果一个对象具有太多的功能,一旦某个功能需要修改,整个对象都会重新编译,一旦有一些错误的代码修改了其他的功能,那我们的风险就会剧增。

l  开闭原则:针对拓展开放,针对修改关闭。核心思想是针对接口编程。在一个类设计完成的时候,我们不应该再进行修改。比如我们

l  里氏替换:子类要能够替换父类

l  接口隔离:使用多个小的专门的接口,而不要使用一个大的总接口。

l  依赖反转:高层模块不依赖于底层模块,二者都同依赖于抽象。抽象不依赖于具体,具体依赖于抽象。 

依赖注入是该原则的一种实现方式。

 

posted @ 2018-04-18 11:00  haoming1100  阅读(114)  评论(0编辑  收藏  举报
本文作者: haoming1100 博客链接: http://www.cnblogs.com/haoming1100 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载时必须带上原文链接!