zoukankan      html  css  js  c++  java
  • 面向对象——多态(资源来自网络 版权非本人)

     1 package com.hzxx.demo;
     2 
     3 public class Polymorphism {
     4 
     5     public static void main(String[] args) {
     6         Person person = new Student();
     7         /*
     8          * 父类引用只能调用父类中存在的方法和属性,
     9          * 不能调用子类的扩展部分,
    10          * 因为父类引用指向的是堆中子类对象继承的父类
    11          * 这里父类person只有一个eat方法
    12          */
    13         person.eat();// 只能调用子类已经重写的父类Person的eat()方法
    14        /*
    15         * instanceof
    16         * 这个对象是否是这个特定类或者是它的子类的一个实例
    17         */
    18         if (person instanceof Student) {
    19             Student stu1 = (Student) person;//把超类转换成子类    
    20             /*
    21              * 调用子类才有的方法
    22              * 但是如果强制把超类转换成子类的话,
    23              * 就可以调用子类中新添加而超类没有的方法了
    24              */
    25             stu1.study();
    26             stu1.walk();
    27         }
    28 
    29         
    30         Behavior behavior = new Student();
    31         behavior.walk();// 只能调用子类已经重写的接口Behavior的walk()方法
    32         if (behavior instanceof Student) {
    33             Student stu2 = (Student) behavior;
    34             /*
    35              * 调用子类才有的方法
    36              */
    37             stu2.study();
    38             stu2.eat();
    39         }
    40     }
    41 }
    42 
    43 class Student extends Person implements Behavior {
    44 
    45     @Override
    46     public void eat() {
    47         super.eat();
    48     }
    49 
    50     @Override
    51     public void walk() {
    52         System.out.println("..人都要走路");
    53     }
    54 
    55     public void study() {
    56         System.out.println("..学生要学习");
    57     }
    58 
    59 }
    60 
    61 class Person {
    62     public void eat() {
    63         System.out.println("父类===人都要吃饭");
    64     }
    65 }
    66 
    67 interface Behavior {
    68     void walk();
    69 }

    大概就是说:超类只能调用超类的方法 不能调用子类的扩展(重写 或者 重载)方法  如果想调用 就要强制转换成子类 

    同样接口也是一样  想要调用扩展的方法要强制转换 (不知道是不是必须要强制换换才能调用 可能还有别的方法 )

  • 相关阅读:
    [iOS开发] 使用Jenkins自动打包并上传至蒲公英
    修改Jenkins的BUILD_NUMBER
    RabbitMQ on windows开启远程访问
    SpringMVC 表单复选框处理
    Spring文件上传配置
    ES6中Reflect 与 Proxy
    vuex中getter的用法
    Toast组建的实现
    link和@import的区别
    Vue组件之props选项
  • 原文地址:https://www.cnblogs.com/zhbx/p/8615764.html
Copyright © 2011-2022 走看看