002_java面向对象的三大特性,如何理解其中的多态?

一,Java三大特性是:封装,继承,多态

@1
所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作对不可信的进行信息隐藏
封装是面向对象的特征之一,是对象和类概念的主要特性。
简单的说,一个类就是一个封装了数据以及操作这些数据的代码逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

@2
所谓继承,是指可以让某个类型的对象获得另一个类型的对象的属性的方法
它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。
继承概念的实现方式有二类实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

@3
所谓多态,就是指一个类实例相同方法不同情形不同表现形式
多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

 

二,如何理解其中的多态?

多态:顾名思义, 就是 “一个引用, 能表现出多种不同形态”。
Java实现多态三个必要条件
@1
继承:在多态中必须存在继承关系子类和父类

@2
重写子类父类某些方法进行重新定义,在调用这些方法时就会调用子类的方法

@3
向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能->调用父类的方法和子类的方法
 

接下来,我们用一段代码来更清楚直接的理解什么是多态
比如,我们需要打印三种图形:
 

class Shape {
    public  void draw() {    
    }
}
class Cycle extends Shape {
    @Override
    public void draw() {
        System.out.println("○");//打印圆
    }
}
class Rect extends Shape {
    @Override
    public void draw() {
        System.out.println("□");//打印矩形
    }
}
class Flower extends Shape {
    @Override
    public void draw() {
        System.out.println("♣");//打印花朵
    }
}
///////////////////////////////////////////////////////////////
public class Test {
    public static void main(String[] args) {
        Shape shape1 = new Flower();
        Shape shape2 = new Cycle();
        Shape shape3 = new Rect();
        drawMap(shape1);
        drawMap(shape2);
        drawMap(shape3);
    }
    // 打印单个图形
    public static void drawMap(Shape shape) {
        shape.draw();
    }
}

002_java面向对象的三大特性,如何理解其中的多态?_第1张图片

理解:
当我们在编写 drawMap 这个方法的时候, 参数类型为 Shape (父类), 此时在该方法内部并不知道, 也不关注当前的 shape 引用指向的是哪个类型(哪个子类)的实例. 此时 shape 这个引用调用 draw 方法可能会有多种不同的表现这种行为就是所谓的多态

那么使用多态有什么好处呢?

@1
类调用者对类的使用成本进一步降低.
封装是让类的调用者不需要知道类的实现细节.
多态能让类的调用者连这个类的类型是什么都不必知道, 只需要知道这个对象具有某个方法即可.
因此, 多态可以理解成是封装的更进一步, 让类调用者对类的使用成本进一步降低。

@2
能够降低代码的 “圈复杂度”, 避免使用大量的 if - else

@3
可扩展能力更强.
如果要新增一种新的形状, 使用多态的方式代码改动成本也比较低.

你可能感兴趣的:(Android-KK篇)