多态总结

多态实质: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虚拟机采用一下绑定机制:

//·实例方法与所引用的实际对象的方法绑定,这种属于动态绑定;
//·静态方法与所引用变量的声明类型(也就是声明变量的类)的方法绑定,静态绑定
//·成员变量(静态变量和成员变量)与所引用变量的声明类型(也就是声明变量的类)的成员变量绑定
//·换句话说引用变量是声明类型(也就是类)那么该引用变量所访问的静态方法,成员变量均是该类的静态方法和该类的成员变量,与第一点相呼应
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值