LivterJA

如果大家有看到我写的不完善的地方还希望不吝赐教

导航

面向对象三大特性:封装,继承,多态(二、多态)

多态

  一,多态的概念

  多态(polymorphism), 是指一个名字可以有多种语义。在面向对象语言中,多态是指在一棵继承树中的类中可以有多个同名但不同方法体及不同形参的方法。通常有两种途径实现多态:方法的重载和覆盖

  多态性允许以统一的风格处理已存在的变量及相关的类。多态性使得向系统里增加新功能变得容易。继承性和多态性是降低软件复杂性有有效技术。

  二,多态的实现

  1、方法的重载

  方法重载时:

  • 参数必须不同。参数个数不同或类型不同。
  • 返回值可以相同,也可以不同。

  重载的价值在于它允许通过使用一个变通的方法名来访问一系列相关的方法。当调用一个方法时,具体执行哪一个方法根据调用方法的参数决定。JAVA运行系统仅执行与调用的参数相匹配的重载方法。尽管JAVA并没有规定重载方法之间必须有联系,但习惯上,为了程序的可读性,最好重载相同含义的方法。

  

例如,输出语句print的参数可以是Java中的任何基本类型,其实就是对print()方法的重载:

public void print(boolean b)

public void print(char c)

public void print(int i)

public void print(long l)

public void print(float f)

public void print(double d)

  • 构造方法的重载

  子类继承超类中所有的成员变量和成员方法,但子类不能继承超类的构造方法。解决办法有两种:一是使用默认的构造方法,二是编写多个直接的构造方法。

  2、方法的覆盖

  在前述的规则中有一条:子类继承超类中所有可被子类访问的成员方法,如果子类方法与超类方法同名,则不能继承,此时子类的方法称为覆盖(override)了超类中的那个方法。在进行酸辣时,应注意以下三点:

  • 子类不能覆盖超类中声明为final或static的方法。
  • 子类必须覆盖超类中声明为abstract的方法,或者子类也声明为abstract
  • 子类覆盖超类中同名方法时,子类方法声明必须与超类被覆盖方法的声明一样。即public或protected关键字不能变。

  方法的覆盖(method overriding)与类的继承有密切的关系。覆盖体现了子类补充或改变超类方法的能力。通过覆盖使一个方法在不同的子类间表现出不同的行为。

  在面向对象系统中,对象封装了方法。利用诸如重名、重定义让名对象自己去解释执行,而这种多义性不会带来混乱。这对于需求分析、模型设计是极为有利的,因这这些工作不需要涉及具体的数据结构和类型,只是着重于提示系统的逻辑合理性。

  

  •   this和super引用的用法区别。

    this有两种用法:既可以指代对象自身,如s1=this;也可以通过this引用本类的成员变量和方法,如this.count和this.toString()。

    super只有一种用法,即通过super引用超类中的成员变量和方法,如super.count和super.print(),而不能单独使用super,如sl=super是非法的。因为子类与超类存在继承关系,子类从超类继承变量和方法,但子类对象与超类对象却不存在类似继承的对应关系,所以super无所指。

 

posted on 2015-08-18 17:34  LivterJA  阅读(702)  评论(0编辑  收藏  举报