美文网首页
Java多态及相关

Java多态及相关

作者: wuhuaguo丶 | 来源:发表于2019-11-21 10:42 被阅读0次

面向对象有三大特征:封装、继承、多态。从一定角度看,封装与继承是为多态准备的。多态也是面向对象中最重要的概念。

多态的解释

  • 父类型的引用指向子类型的对象
  • 允许不同类型的对象对同一消息作出响应
  • 同一消息可以根据发送对象的不同而采用多种不同的行为方式

实现多态的技术
动态绑定(dynamic binding) 是指执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

多态的实现方式

  • 接口实现
  • 继承父类的方法重写
  • 方法重载

关于Java引用类型
在Java中引用变量有两个类型,一个是编译时类型,一个是运行时类型。
编译时类型时由声明该变量时所使用的类型决定。
运行时类型是由该变量所指向的对象类型决定。

如果两种类型不一致,就会出现多态。因此就会将子类对象直接赋值给父类引用变量,称为向上转型,而不用进行类型转换。如Animal a = new Bird(),其中引用变量a的编译时类型时Animal,运行时类型是Bird,两者不一致,所以出现多态。

注意:当使用该对象引用进行调用时,有一条规则:对象调用编译时类型的属性和运行时类型的方法。

class Person {
    public String name;

    public Person() {
        name = "person";
    }

    public void show() {
        System.out.println("person show");
    }
}

class Woman extends Person {
    public String name;

    public Woman() {
        name = "woman";
    }

    public void show() {
        System.out.println("woman show");
    }
}

public class TestDemo {

    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name);
        person.show();

        System.out.println();

        Person person1 = new Woman();
        System.out.println(person1.name);
        person1.show();

        System.out.println();

        Woman woman = new Woman();
        System.out.println(woman.name);
        woman.show();
    }

}

结果

person
person show

person
woman show

woman
woman show

从结果可以看出,第一条语句 person 引用调用的属性属于 Person 类,person 引用调用的方法还是 Person 类;之后以此类推

参考:
Java编译时类型和运行时类型

相关文章

  • Java多态及相关

    面向对象有三大特征:封装、继承、多态。从一定角度看,封装与继承是为多态准备的。多态也是面向对象中最重要的概念。 多...

  • Java多态相关

    多态的三个条件: 1、要有继承 2、要有重写 3、父类引用指向子类对象[Java多态之方法的重写](http://...

  • jvm结构&运行机制&多态实现

    浅析Java虚拟机结构与机制 浅谈多态机制的意义及实现 多态:编译时多态(重载)、运行时多态(继承父类、实现接口)...

  • Java继承多态相关

    1、假设父类Father,子类Son继承父类Father,若声明一个父类Father类型的引用f,创建一个新的So...

  • Java抽象类与接口的区别

    相信有很多有经验的小伙伴们在面试中都会被问到Java抽象类与接口的理解等相关问题。是从Java多态中的特性,多态是...

  • java多态面试题

    java多态性 多态分两种: (1) 编译时多态(设计时多态):方法重载。 (2) 运行时多态:JAVA运...

  • 2017 09 20

    结合9.20日所学的继承,多重继承及指针等相关知识,对多态及虚函数进行学习,主要练习为图形类的多态、虚函数的实际应...

  • java多态面试题

    java多态性 多态分两种: (1) 编译时多态(设计时多态):方法重载。 (2) 运行时多态:JAVA运行时...

  • 2018-01-25

    多态机制 java语言,实现多态...

  • 面试要点(先学着)

    1.Java 1.1 Java基础 对抽象、继承、多态的理解 泛型的作用及使用场景 枚举的特点及使用场景 线程sl...

网友评论

      本文标题:Java多态及相关

      本文链接:https://www.haomeiwen.com/subject/kquzictx.html