java多态

来源:互联网 发布:陈翔六点半 知乎 编辑:程序博客网 时间:2024/05/17 13:41
定义:多态性是指统一的接口,不同的表现形式。

多态的体现

       父类或者接口的引用指向或者接收自己的子类对象。
        父类的引用也可以接收自己的对象

多态的前提

        必须是类与类之间有关系,要么继承或实现
        通常还有一个前提,存在覆盖

多态的好处

        多态的出现大大的提高了程序的扩展性

多态的弊端

        只能使用父类的引用访问父类的成员

对象类型的装换

和基本数据类型之间的强制类型转换(向下转型)一样,存在继承关系的父类对象和子类对象之间可以相互转换(即引用类型的转换),并遵守以下原则:
  1).子类对象可以被视为其父类的一个对象。
  2).父类对象不能被当作是某一个子类的对象

运行时多态的三原则

1.对象不变;(改变的是主观认识)
2.父类类型的子类对象 不能访问子类中特有方法 ,如果想访问子类中特有方法必须将父类类型再强制转换为子类类型。例如: cat cat = (cat)cat;
3.父类类型的子类对象实际调用子类覆盖后的方法。

实例

在我们下面的例子中,有5个类。
Game类是Football、Basketball、Popolong的父类,Games类使用前面4个类。
Java根据动态绑定决定执行“更具体”的方法,即子类方法。

实例

在我们下面的例子中,有5个类。
Game类是Football、Basketball、Popolong的父类,Games类使用前面4个类。
Java根据动态绑定决定执行“更具体”的方法,即子类方法。
//Game.javapackage cn.edu.uibe.oop;public class Game { protected void play(){  System.out.println("play game"); }}//Football.javapackage cn.edu.uibe.oop;public class Football extends Game { protected void play() {    System.out.println("play football");    super.play(); } void f(){  play(); }}//Basketball.javapackage cn.edu.uibe.oop;public class Basketball extends Game{ protected void play() {  System.out.println("play basketball"); }}//Popolong.javapackage cn.edu.uibe.oop;public class Popolong extends Game { protected void play() {  System.out.println("play popolong"); }}//Games.javapackage cn.edu.uibe.oop;public class Games { public static void main(String[] args) {  Game[] games = new Game[10];  games[0] = new Basketball();  games[1] = new Football();  games[2] = new Popolong();    for(int i=0;i<games.length;i++){   if(games[i]!=null)      games[i].play();  }   }}


0 0
原创粉丝点击