面向对象的几大特性;多态(重载和覆盖)

1)面向对象有哪些特征呢?
一般来说,面向对象有三大特性,封装、继承和多态。其实按理说还应该有一个:抽象。
①封装:封装是指将客观事物抽象成类,每个类对自身的数据和方法实行保护。类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
②继承:继承是一个联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程叫做类继承。新类继承了原始
类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且派生类可以修改或增加新的方法使之更合适特殊的
需要。
继承特性:(1)java不支持多重继承,通过接口实现多重继承的目的。
 (2)子类只继承父类的非私有(public 与 protected)成员变量与方法。
 (3)当子类中定义的成员变量和父类中定义的成员变量同名和方法有相同方法签名(同名、同参数列表)时,子类覆盖父类变量和方法,没有继承。
③多态:多态是指允许不同类的对象对同一消息作出响应。多态包括参数化多态和包含多态。多态语言具有灵活、抽象、行为共享、代码共享等优势,很好地解决了应用程序函数的同名
问题。 
参数多态(parametric),采用参数化模板,通过给出不同的参数列表,使得一个结构有多种类型。包含多态(InclusionPolymorphism):同样的操作可用于一个类型及其子类型。
(注意是子类型,不是子类。)包含多态一般需要进行运行时的类型检查。
2)多态的实现
注意:只有类中方法才有多态的概念,类中成员变量没有多态的概念。
多态主要有2种表现形式: ①方法的重载(overLoad)。重载是指同一个类中有多个同名的方法,但是这些方法有着不同的参数,因此编译时就可以确定到底调用哪个方法,它是一种编译时多态。重载可以看做一个类中的方法多态性。个人感觉它是参数多态。
②方法的覆盖(overRide)。子类可以覆盖父类的方法,因此同样的方法会在父类和子类中有着不同的表现形式。在java语言中,基类的引用变量不仅可以指向基类的实例对象,亦可以指
向其子类的实例对象。同样,接口的引用变量也可以指向其实现类的实例对象。而程序调用的方法在运行期才动态绑定(绑定是指将一个方法调用和一个方法主体连接到一起),就是引用
变量所指向的具体实例对象的方法,也就是内存正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。通过这种动态绑定的方法实现多态。由于只有在运行时才能确定调用
哪个方法,因此通过方法覆盖实现的多态也可以称为运行时多态。个人感觉它是包含多态。
重载和覆盖的区别:
重载:(1)一个类中定义多个同名方法。不同的参数列表(参数个数、参数类型、参数顺序);
 (2)不能通过方法的访问权限、返回值类型和抛出异常类型进行重载;
覆盖:(1)派生类方法覆盖基类方法。派生类的方法必须要基类的方法有相同方法名和参数;
 (2) 派生类的方法返回值类型必须和基类方法的返回值类型相同;
 (3) 派生类方法的抛出异常类型必须和基类方法的抛出异常类型一致;
 (4) 基类的被覆盖的方法不能为private,否则子类方法只是定义了一个方法,并没有实现覆盖。

猜你喜欢

转载自blog.csdn.net/x_i_xw/article/details/78975840
今日推荐