Java面向对象的三大特性

1、封装

    首先,属性能够描述事物的特征,方法能够描述事物的动作。封装就是把同一事物的共性(即属性和方法)归到同一类中,方便使用。

    封装也称为信息隐藏,是指利用抽象数据类型把基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能地隐藏数据细节,只保留一些接口使其与外界发生联系。也就是说用户无需知道内部数据和方法的具体实现细节,只需根据留在外部的接口进行操作就行。

    封装的好处:

        1)实现了专业的分工

        2)良好的封装能够减少耦合

        3)类内部的结构能够自由修改

        4)可以对成员进行更精确的控制

        5)隐藏信息,实现细节

    实现封装的步骤:

        1)修改属性的可见性来限制对属性的访问

        2)为每个属性创建一对赋值和取值的方法(即setter和getter方法),用于对属性的访问

        3)在赋值和取值方法中,加入对属性的存取限制


2、继承

    Java继承是面向对象的最显著的一个特征。

    继承是从已有的类中派生出新的类,新的类能吸收已有类的属性和方法,并能扩展新的属性和方法。

    Java不支持多继承,单继承使Java的继承关系更简单,一个类只有一个父类,易于管理程序,父类就是子类的一般化,子类就是父类的特化(具体化)。

    继承所表达的是一种对象之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。我们称被继承的类为基类、父类或超类,而继承父类的类被称为派生类或子类。

    Java继承的特征:

        1)继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B继承而来的属性和方法,也有从类A继承而来的属性和方法,还可以自己新定义属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。

        2)继承提供了代码复用的功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(即数据属性和方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。

        3)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。


3、多态

    方法的重写、重载与动态连接构成多态性。

    Java之所以引入多态的概念,原因之一是Java只允许单继承,派生类与基类间有IS-A的关系(即猫 is a 动物)。单继承虽然保证了继承关系的简单明了,但是在功能上有很大的限制,所以,Java引入多态性的概念以弥补单继承的不足;此外,抽象类和接口也是解决了单继承规定限制的重要手段。同时,多态是面向对象编程的精髓所在。

    要理解多态,首先要知道什么是“向上转型”。

    定义一个子类Cat,它继承自父类Animal类。可以通过 Cat cat = new Cat(); 来实例化一个Cat对象,这很好理解。但当定义为这样时:Animal animal = new Cat(); ,就不是那么好理解了。其实很简单,它表示定义了一个Animal类型的引用,指向新建的Cat类型的对象;由于Cat是继承自Animal类,所以Animal类型的引用是可以指向Cat类型的对象的。这样做的意义在于:子类是对父类的一个改进和扩充,所以子类在功能上比父类强大、属性上比父类独特,定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。但父类引用只能调用父类中存在的方法和属性,不能调用子类的扩展部分,因为父类引用指向的是堆中子类对象继承的父类;如果把父类引用强制转换成子类引用,则可以调用子类中特有的属性和方法了。同时对于父类中定义的方法,如果子类中重写了该方法,那么符类型的引用将会调用子类中的这个方法,这就是多态中的动态连接。下面是一个简单例子:

package JavaDay5_16;

/**
 * @author myvina@qq.com
 * @date 18-5-16  下午1:05
 */

class Animal {
    void sleep() {
        System.out.println("Sleeping...");
    }
}

class Cat extends Animal {
    void eat() {
        System.out.println("Eating fish...");
    }

    @Override
    void sleep() {
        System.out.println("Cat is sleeping...");
    }
}

public class JavaPolymorphism {
    public static void main(String[] args) {
        Animal cat = new Cat();
        cat.sleep();
        ((Cat) cat).eat();
    }
}

    运行结果如下:


阅读更多
文章标签: Java面向对象
个人分类: Java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

Java面向对象的三大特性

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭