疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java多态学习笔记


 

   

  Java中多态性的实现

  什么是多态

  面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。

  这是我们最后一个概念,也是最重要的知识点。

  多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用

  多种不同的行为方式。(发送消息就是函数调用)

  实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,

  根据其实际的类型调用其相应的方法。

  多态的作用:消除类型之间的耦合关系。

  现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就

  是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是

  Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。

  下面是多态存在的三个必要条件,要求大家做梦时都能背出来!

  多态存在的三个必要条件

  一、要有继承;

  二、要有重写;

  三、父类引用指向子类对象。

  多态是一种运行期的行为,不是编译期的行为。

  多态的好处:

  1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作

  ,对其他任何圆形几何体,如圆环,也同样工作。

  2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、

  继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、

  半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。

  3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来

  完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,

  computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个

  接口方法。

  4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。

  5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算

  和操作时,这个特点尤为突出和重要。

  Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。

  复制代码

  1 abstract class Animal {//父类

  2 private String name;//父类的方法:获取名字

  3 Animal(String name) {this.name = name;}

  4 /*

  5 public void enjoy(){ //父类方法:输出叫声

  6 System.out.println("叫声......");

  7 }

  8 */

  9 public abstract void enjoy();

  10 }

  11

  12 abstract class Cat extends Animal {//子类Cat继承与父类Animal

  13 private String eyesColor;//子类对父类方法的重写,要先重写 ,子类private的方法

  14 Cat(String n,String c) {super(n); eyesColor = c;}//调用父类name函数,和Cat的

  eyesColor

  15 /*

  16 public void enjoy() {//Cat对父类的“叫声......”表达不满意,重写父类enjoy方法 喵~~~~

  17 System.out.println("猫叫声......");

  18 }

  19 */

  20 //public abstract void enjoy();

  21 }

  22

  23 class Dog extends Animal {

  24 private String furColor;//对父类重写,毛色

  25 Dog(String n,String c) {super(n); furColor = c;}

  26

  27 public void enjoy() {

  28 System.out.println("狗叫声......");

  29 }

  30 }

  31

  32 class Bird extends Animal {

  33 Bird() {

  34 super("bird");

  35 }

  36 public void enjoy() {

  37 System.out.println("鸟叫声......");

  38 }

  39 }

  40

  41 class Lady {

  42 private String name;

  43 private Animal pet;

  44 Lady(String name,Animal pet) {

  45 this.name = name; this.pet = pet;

  46 }

  47 public void myPetEnjoy(){pet.enjoy();}

  48 }

  49

  50 public class Test {

  51 public static void main(String args[]){

  52 Cat c = new Cat("catname","blue");//向下转型

  53 Dog d = new Dog("dogname","black");

  54 Bird b = new Bird();

  55 //Lady l1 = new Lady("l1",c);

  56 Lady l2 = new Lady("l2",d);

  57 Lady l3 = new Lady("l3",b);

  58 //l1.myPetEnjoy();

  59 l2.myPetEnjoy();

  60 l3.myPetEnjoy();

  61 }

  62 }

  复制代码