Java--多态

8.1 什么是多态

  1. 方法多态:

    • 重载体现多态

    • 重写体现多态

  2. 对象多态

    • 对象的编译类型和运行类型可以不一致,编译类型在定义时就确定,不能改变。(左边类型为编译类型)

    • 对象的运行类型是可以变化的,可以通过 getClass()来查看运行类型。

    • 编译类型看 = 左边 运行类型看 = 右边。

8.2 基础知识点

  1. 覆写 Override: 在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,并且返回值也相同,被称为覆写(Override)。

  2. 覆写注意点:

    • 子类方法的参数,方法名称 要和父类的方法参数,方法名称完全一样。

    • 子类方法的返回类型和父类方法返回类型一样,或者是父类返回类型的子类(父类 object 子类 String

    • 子类方法不能缩小父类方法的访问权限

      public > protected > 默认 > private
      void sayok(){}//父类
      public void sayok(){} //子类扩大访问权限可行
      //子类可以扩大访问权限不能缩小访问权限
      //父类是public 子类只能为public

  3. 方法重写和重载的区别

    名称范围方法名形参列表返回类型修饰符
    重载(overload)本类中必须一样类型 个数 顺序至少有一个不同无要求无要求
    重写(override)父子类必须一样相同子类重写的方法,返回类型和父类返回类型一致,或者是其子类型子类方法不能缩小父类方法范围

    属性没有重写!! 方法可以重写 属性不可以

    Base是父类 有count属性
    Sub是子类 有count属性
    Base b=new Sub();
    b.count 属性是父类的属性!! 属性的值看编译类型!!!!

  4. 多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。多态的特性就是,运行期才能动态决定调用的子类方法。对某个类型调用某个方法,执行的实际方法可能是某个子类的覆写方法。

  5. 多态具有一个非常强大的功能,就是允许添加更多类型的子类实现功能扩展,却不需要修改基于父类的代码。

  6. 在子类的覆写方法中,如果要调用父类的被覆写的方法,可以通过super来调用。

     @Override
        public String hello() {
            // 调用父类的hello()方法:
            return super.hello() + "!";
        }

  7. 继承可以允许子类覆写父类的方法。如果一个父类不允许子类对它的某个方法进行覆写,可以把该方法标记为final。用final修饰的方法不能被Override: 类似于 C++ 中的Const

     protected String name;
        public final String hello() {
            return "Hello, " + name;
        }

  8. 类中同样可以加final字段用来修饰类不能被重写。类中的属性同样也可以用final字段防止重写。但是可以通过构造函数来初始化类中的属性。

8.3 Java动态绑定机制

  • 当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定。(现在运行类型的类中找对应的方法,没有对应的方法再利用继承的机制调用父类方法)

  • 但调用对象属性时,没有动态绑定机制,那里声明,哪里使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值