javase -- 多态性的表现


多态性.

可理解为一个事物的多种形态

  • 父类的引用指向子类对象(或子类的对象赋给父类的引用)

多态的使用.

虚拟方法调用.

当调用子父类同名的方法时,实际执行的是子类重写父类的方法

父类根据子类更据赋给它的不同子类对象,动态调用属于子类的方法

这样的方法调用在编译期是无法确定的

多态性是运行时行为

  • 有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法(编译看左边,运行看右边)
  • 多态性只适用于方法,不适用与属性(编译运行都看左边)
  • 不能调用子类中特有的方法
class B {
    int field = 1;
    public void method() {
        System.out.println("父类方法");
    }
}

public class A extends B{
    int field = 2;
    @Override
    public void method() {
        System.out.println("子类重写父类的方法");        
    }
    public static void main(String[] args) {
        //对象的多态性
        B a = new A();
        //多态的使用:当调用子父类同名的方法时,实际执行的是子类重写父类的方法  ---- 虚拟方法调用
        System.out.println(a.field);// 1 
        a.method();//调用的方法是子类重写父类后的方法  
        //如果你 Ctrl + 鼠标左键点击这个方法它会跳到,父类的method,但是执行的内容是子类的method方法
        //所以说 编译看左边(父类对象里的方法)  执行看右边(子类重写的方法)
    }
}

多态性的使用前提.

  • 继承
  • 方法重写

文章作者: liuminkai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 liuminkai !
评论
 上一篇
javase -- Object类 javase -- Object类
Object. 是所有java类的根父类 Object只有一个 无参构造器 Object类中的功能.1、clone.protected native Object clone(). 创建并返回一个对象的副本(新的对象:包含旧对象的状态
2020-07-29
下一篇 
javase -- super关键字 javase -- super关键字
super. 父类 使用super可以在构造器或方法中调用父类的属性(super.属性名)、构造器(super(形参列表))、方法(super.方法名) 通常情况下,我们习惯省略super 但,父类,与子类存在同名的方法或属性时,如果你
2020-07-29
  目录