多态

来源:互联网 发布:必修3基本算法语句ppt 编辑:程序博客网 时间:2024/06/07 17:52

  源代码:

class BaseClass{    public int book=6;    public void base(){        System.out.println("父类的普通方法");    }    public void test(){        System.out.println("父类的被覆盖的方法");    }}public class Java3 extends BaseClass{    public String book="疯狂java讲义";    public void test(){        System.out.println("子类的覆盖父类的方法");    }    public void sub(){        System.out.println("子类的普通方法");    }    public static void main(String[] args) {        BaseClass ac=new Java3();        System.out.println(ac.book);//父类的        ac.base();        ac.test();//子类的        //ac.sub();        //上面的语句是非法的,因为sub方法不是编译时类型BaseClass中的方法            }    }


运行结果:




  1.java引用变量有两种类型,一种是编译时类型另外一种是运行时类型,当编译时类型和运行时类型不一致时就可能会发生所谓的多态;

  2.当一个子类对象直接赋给父类引用变量时,例如BaseClass ac=new SubClass;(SubClass是BaseClass的子类)ac的编译时类型是BaseClass,ac的运行时类型是SubClass,当运行是调用该引用变量的方法时,其方法总是表现出子类方法的行为特征,而不是父类方法的行为特征,这就可能出现:相同类型的变量、调用同一个方法呈现出多种不同的行为特征,这就是多态;

  3.只能调用编译时类型的方法,不能调用运行时类型的方法;

  4.调用方法只能调用父类中的方法,假使子类中有方法的重写,则执行的形式时子类中重写的形式;调用实例变量则是按照父类中定义和初始化的形式,忽略子类中的初始化;(方法是按照运行时类型来执行的)

  5.当运行时类型和编译时类型不相同时,只能存在这样的情况:运行时类型所表示的类时编译时类型所表示类的子类;

  6.因为子类是一个特殊的父类,因此java允许把一个子类对象直接赋给一个父类引用变量,无须任何类型转换,或者是被称为向上转型,向上转型有系统自动完成;

  7.方法具有多态性,而实例变量不具有多态性;

  8.通过引用变量来访问其保护的实例变量时,系统总是试图访问它编译时类型所定义的成员变量,而不是它运行时类型所定义的成员变量;

0 0
原创粉丝点击