之前也写过面向对象的文章,比如《面向对象基础》《重写与重载》《面向对象技术》等等。。但是当时是对面向对象的第一次亲密接触,对它还没有向现在这么熟悉,所以,只是囫囵吞枣的看了《大话设计模式》那本书,然后在CSDN上查了查资料就写下了上面的文章。那些文章是知识的罗列、积累和归纳。并不是我自己的思考。
那么这篇文章就不一样了,因为她确实是属于我的东西,现在分享给大家。。
上面这张图充分展现出了面向对象的核心思想:抽象、封装、继承和多态。
抽象
抽象是面向对象的基础,也是封装、继承和多态的前提。把具有相同特性的一类东西,集中到一起的过程就是抽象。就好比小狗、小猫和小耗子,虽然它们是不同的物种,但是它们都属于动物,所以,咱们可以统一叫它们动物。
封装
封装就是将抽象出来的东西,统一集中到一个类中。这样一来,这个类中的所有对象都具有相同的属性和方法。将小狗、小猫和小耗子封装成动物类,这个动物有一个方法——叫。
重载
重载可以赋予新的功能。最常用的是重载构造函数。之前这个动物没有名字,那么咱们就可以利用重载构造函数的方法,为这个动物加一个形参name。这样一来,当小狗、小猫和小耗子继承动物类的时候,就会赋予它们一个名字。
继承
继承就相当于儿子继承父亲的基因和财产。但是有些东西是不能被继承的,是有权限设定的。比如父亲的儿子就不能被继承,因为这样一来自己就是自身的儿子了,这就乱套了。。
继承的好处是代码复用。动物可以叫,相应的,小狗也会叫。。
重写
重写就是子类根据自己的特性,重新定义从父类那里继承的方法。小狗、小猫和小耗子继承了动物“叫”的方法后,它们就都会叫了。但是它们有各自的特点,狗叫是“汪汪”、猫叫是“喵喵”、耗子叫是“吱吱”。所以,通过重写就可以得到各自独特的叫声。
多态
多态就是根据不同的需求,动态的满足你的需求。如果你想听狗叫声,那么这个动物就会变成一条狗,然后“汪汪”;如果想听猫叫声,动物就会变成一只猫,然后“喵喵”。。
如果要想达到多态的效果,要满足三个必要条件:继承、重写、父类对象引用子类对象。
下面是一个多态的实例:
abstract class Animal{ private String name; public Animal(String name){ this.name=name; } public abstract void enjoy(); } class Cat extends Animal{ private String eyesColor; Cat(String n,String c){ super(n); this.eyesColor=c; } public void enjoy(){ System.out.println("猫叫声。。。"); } } class Dog extends Animal{ private String furColor; Dog(String n,String c){ super(n); this.furColor=c; } public void enjoy(){ System.out.println("狗叫声。。。"); } } class Lady{ private String name; private Animal pet; Lady(String name,Animal pet){ this.name=name; this.pet=pet; } public void myPetEnjoy(){ pet.enjoy(); } } public class TestDuotai{ public static void main(String[] args){ Cat c=new Cat("catname","blue"); Dog d=new Dog("dogname","black"); Lady l1=new Lady("l1",c); Lady l2=new Lady("l2",d); l1.myPetEnjoy(); l2.myPetEnjoy(); } }
总结
之前学过的知识需要不断的总结和思考,才能成为自己的东西。