面向对象有哪些特征?

面向对象的特征包括封装、继承、多态和抽象。

  1. 封装:将客观的事物抽象成类,每个类对自身的数据和方法实行保护。类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
  2. 继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确的表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的的特性,新类称为原始类的派生类,而原始类称为新类的基类。派生类可以从它的基类那里继承方法和实例变量,并且派生类可以修改或者增加新方法使之更合适特殊的需要。
  3. 多态:多态是指允许不同类对象对同一消息作出响应。多态包含参数化多态和包含多态。多态语言具有灵活,抽象,行为共享,代码共享等优势,很好的解决了应用程序函数同名等问题。
  4. 抽象:抽象就是忽略一个主题中与目前当前目标无关的那些方面,以便充分的注意和当前目标有关的方面。抽象并不打算了解所有问题,而是选择其中一部分,暂时不用部分细节。抽象包括两方面:过程抽象、数据抽象。

拓展:多态的实现机制

多态是面向对象程序设计中代码重用的一个重要机制,它表示同一个操作作用在不同的对象时,会有不同的语义,从而产生不同的结果。例如,同样是执行 “+” 操作, “3+4”用于实现整数相加,而“3” + “4”是实现了字符串连接。在Java语言中,多天主要有以下两种表现方式:

  1. 方法的重载(overload)。重载是指同一个类中有多个同名的方法,但是这些方法有着不同的参数,因此在编译时就可以确定调用哪个方法,它是一种编译时多态。重载可以看做是一个类中的方法多态性。
  2. 方法的覆盖(override)。子类可以覆盖父类的方法,因此同样的方法会在父类和子类中有着不同的表现形式。在Java语言中,基类的引用变量不仅可以指向基类本身的实例对象,还可以指向其子类的实例对象。同样,接口的引用变量也可以指向其实现类的的实例对象。而程序在调用的方法在运行期间才动态绑定(绑定是指将一个方法调用和一个方法的主体连接在一起),就是引用变量所指向的具体的实例对象的方法,也就是内存中正在运行哪个对象的方法,而不是引用变量类型中定义的方法。通过这种动态绑定的方法实现了多态。由于只有在运行时才能确定调用哪个方法,因此通过重写(方法覆盖)实现的多态也可以被称作运行时多态。

代码演示:


public class TaiDuo {

    public static void main(String[] args) {
        Base b = new Derived();
        b.f();
        b.g();
    }
}

class Base{
    public Base(){
        g();
    }

    public void f(){
        System.out.println("Base f()");
    }

    public void g(){
        System.out.println("Base g()");
    }

}

class Derived extends Base {
    public void f(){
        System.out.println("Derived f()");
    }

    public void g(){
        System.out.println("Derived g()");
    }
}

运行结果是:

Derived g()
Derived f()
Derived g()

结果解析:

子类方法和父类方法同名,因此会覆盖父类中的方法,子类实例化对象的时候,会先调用父类的构造方法,父类的构造方法中调用g();,该方法被子类覆盖。

发布了102 篇原创文章 · 获赞 49 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/SoWhatWorld/article/details/104663424