多态总结

来源:互联网 发布:软件效果器怎么用 编辑:程序博客网 时间:2024/06/05 18:48

多态实质:A系统向B系统请求名为甲的服务,甲这种服务在B里有多种实现方式,具体细节被封装在B系统中,对于A系统来说是不可见的。
以下规则适用于父类 的引用变量引用子类实例变量

//父类public class base{    String BaseStr="base";    static String staticBaseStr="staticBase";    public void method1(){        System.out.println("Base's method1")    }    public static void method2(){        System.out.println("Base's static method2")    }}//子类public class Sub extends base{    String SubStr="sub";    static String staticSubStr="staticSub";    public void method1(){        System.out.println("Sub's method1")    }    public static void method2(){        System.out.println("Sub's static method2")    }}public class test{    public void main(arg s){        Base base =new Sub();//父类 的引用变量引用子类实例变量        base.BaseStr="new base";//合法        base.SubStr="new sub";//编译出错 不符合规则1,规则3第三点  Base中没SubStr;        ((Sub)base).SubStr="new sub";//合法,向下转型为Sub类型        base.staticBaseStr="123";//合法        base.staticSubStr="123";//编译出错 不符合规则1,规则3第三点  Base中没staticSubStr;        ((Sub)base).staticSubStr="123"//合法,理由同上        base.method1();//根据规则2 打印Sub's method1         base.method2();//根据规则3第二小点 打印Base's static method2    }}

1、对于一个引用类型的变量,java编译器按照它声明的类型处理。
2、对于一个引用类型的变量运行时java虚拟机按照实际引用的对象来处理
3、在运行时环境中,通过引用变量来访问所引用对象的方法和属性时java虚拟机采用一下绑定机制:

//·实例方法与所引用的实际对象的方法绑定,这种属于动态绑定;//·静态方法与所引用变量的声明类型(也就是声明变量的类)的方法绑定,静态绑定//·成员变量(静态变量和成员变量)与所引用变量的声明类型(也就是声明变量的类)的成员变量绑定//·换句话说引用变量是声明类型(也就是类)那么该引用变量所访问的静态方法,成员变量均是该类的静态方法和该类的成员变量,与第一点相呼应