• Java#19(面向对象三大特征之一:多态)


    目录

    一.多态

    二.多态中调用成员的特点

    三.instanceof关键字


    一.多态

    多态:同类型的对象,表现出的不同形态

    格式:父类类型 对象名称 = 子类对象;

    前提:

    (1)有继承关系

    (2)有父类引用指向子类对象

    (3)有方法重构

    优点:

    (1)使用父类作为参数,可以接收所有子类对象

    (2)体现多态的扩展性和便利

    代码示范:

    第一段为父类Person,第二,第三,第四段分别是3个子类,第五段是测试代码

    1. package Demo;
    2. public class Person {
    3. private String name;
    4. private int age;
    5. public Person() {
    6. }
    7. public Person(String name, int age) {
    8. this.name = name;
    9. this.age = age;
    10. }
    11. public String getName() {
    12. return name;
    13. }
    14. public void setName(String name) {
    15. this.name = name;
    16. }
    17. public int getAge() {
    18. return age;
    19. }
    20. public void setAge(int age) {
    21. this.age = age;
    22. }
    23. public void show(){
    24. System.out.println(name+","+age);
    25. }
    26. }
    1. package Demo;
    2. public class Student extends Person{
    3. //重写方法
    4. @Override
    5. public void show(){
    6. System.out.println("学生的姓名为:"+getName()+" 年龄为:"+getAge());
    7. }
    8. }
    1. package Demo;
    2. public class Teacher extends Person{
    3. //重写方法
    4. @Override
    5. public void show(){
    6. System.out.println("老师的姓名为:"+getName()+" 年龄为:"+getAge());
    7. }
    8. }
    1. package Demo;
    2. public class Administrator extends Person{
    3. @Override
    4. public void show(){
    5. System.out.println("管理员的姓名为:"+getName()+" 年龄为:"+getAge());
    6. }
    7. }
    1. package Demo;
    2. import java.rmi.registry.Registry;
    3. public class Test {
    4. public static void main(String[] args) {
    5. //创建对象
    6. Student s = new Student();
    7. s.setName("zhangsan");
    8. s.setAge(19);
    9. Teacher t = new Teacher();
    10. t.setName("lisi");
    11. t.setAge(31);
    12. Administrator admin = new Administrator();
    13. admin.setName("wangwu");
    14. admin.setAge(40);
    15. register(s);
    16. register(t);
    17. register(admin);
    18. }
    19. //这个方法可以接收学生,老师,还有管理员
    20. //将父类写在参数位置
    21. public static void register(Person p){
    22. p.show();
    23. }
    24. }

    结果展示:s是学生对象,t是老师对象,admin是管理员对象

    二.多态中调用成员的特点

    调用成员变量:编译看左边,运行也看左边

    (编译看左边:javac编译代码时,会看左边父类有没有这个变量,如果有,编译成功,如果没有,编译失败; 运行看左边:java运行代码时,实际上运行的是左边父类的成员变量)

    调用成员方法:编译看左边,运行看右边

    (编译看左边:javac编译代码时,会看左边父类有没有这个方法,如果有,编译成功,如果没有,编译失败; 运行看右边:java运行代码时,实际上运行的是右边子类的成员方法)

    代码示范:

    1. package Demo1;
    2. public class Test {
    3. public static void main(String[] args) {
    4. Animal a = new Cat();
    5. System.out.println(a.name);
    6. a.show();
    7. }
    8. }
    9. //父类Animal
    10. class Animal{
    11. String name = "动物";
    12. public void show(){
    13. System.out.println("animal show");
    14. }
    15. }
    16. //子类Cat
    17. class Cat extends Animal{
    18. String name = "猫";
    19. @Override
    20. public void show(){
    21. System.out.println("cat show");
    22. }
    23. }

    结果展示:

    三.instanceof关键字

    格式:对象名 instanceof 类名; (判断这个对象是不是后面这个类或子类所创建的对象,是返回true,不是返回false)

  • 相关阅读:
    Mendix与Java组件的完美结合实践
    M4 tm4c1294单片机软件调式总结
    vue购物车实战
    Tomcat安装及配置(Windows环境)
    LeetCode·968.监控二叉树·贪心
    每日一题|2022-11-23|1742. 盒子中小球的最大数量|Golang
    MFC新建内部消息
    【代码随想录】算法训练计划01
    R语言forcats包处理因子
    leetcode做题笔记226. 翻转二叉树
  • 原文地址:https://blog.csdn.net/guaiwu_/article/details/127972188