java基础_多态




理解多态

多态:相同类型的变量,调用同一个方法呈现出多种不同的行为特征,这就是多态。

  父类引用指向子类对象才有可能产生多态。
用下面的例子进行分析。class Base
{
        public int x = 10;
        public  void base(){
                System.out.pritnln( "父类的方法" );
        }
        public void ploy(){
                System.out.println( "父类被子类覆盖的方法") ;
        }
}
class Sub extends Base

        public int x = 90;
        public void sub(){
                System.out.println( "子类的方法" );
        }
        public void  ploy(){
                System.out.ptintln( "子类覆盖父类的方法" );
        }
}
class Test
{
        public static void main(String[] args){
                 //编译时类型和运行时类型完全一样因此不存在多态
                Base b = new Base();
                 //输出10
                System.out.println(b.x);
                 //执行Base里的方法
                b.base();
                 //执行Base里的方法
                b.ploy();
                  //编译时类型和运行时类型完全一样因此不存在多态
                Sub s = new Sub();
                 //输出90
                System.out.println(s.x);
                 //调用从父类继承到的base方法。
                s.base();
                 //执行当前类的方法
                s.sub();
                s.ploy();
                 //编译时类型和运行时类型不一样,可能发生多态
                Base base = new Sub();
                 //输出10 -----表明访问的是父类的Field
                System.out.println(base.x);
                 //执行从父类继承到的base方法
                base.base();
                 //执行当前类的ploy方法
                base.ploy();
                 //因为base的编译时类型是Base
                //Base类没有提供sub方法所以下面代码编译时会出现错误
                base.sub();
        }
}

把一个子类对象直接赋给一个父类引用变量,无需任何类型转换,被称为向上转型,向上转型由系统自动完成,
引用变量在编译阶段只能调用其编译时多具有的方法,运行时执行他运行时类型所具有的方法。
通过引用变量来访问其包含的实例field时,系统总是试图访问它编译时类型所定义的field,而不是它运行时类型所定义的Field。

子类和父类的方法有三种关系。
1父类方法和子类方法同名,子类会覆盖父类的方法。
2,子类方法会继承父类的所有public方法。
3,子类的扩展方法,在父类里没有。

大家可根据这三种关系,加深多态时,引用变量调用方法的情况
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值