zoukankan      html  css  js  c++  java
  • Java基础——多态

     多态性是指允许不同类型的对象对同一消息做出相应。具有灵活性、抽象、行为共享、代码共享的优势,共享就意味着最大化利用和简洁,还有就是加载速度。

    一、多态的作用

    消除类型之间的耦合关系。即同一事件发生在不同的对象上会产生不同的结果。

    二、多态的实现形式

    1.重载(发生在同一个类中)

    2.覆盖(发生在子类中)

    三、多态的好处

    1.可替换性

    2.可扩展性

    3.接口性(多态是超累通过方法签名,向子类提供了一个共同的接口)

    4.简洁性

    5.灵活性

    注意:这些好处说起来比较虚,只有你真正应用的时候才能体会得到。

    四、多态存在的三个前提

    1.要有继承关系

    2.子类要重写父类的方法

    3.父类引用指向子类对象

    代码举例说明:定义一个父类Animal,一个子类Dog

     1 //父类——Animal
     2 public class Animal {
     3     int num = 44;
     4     static int age = 2;
     5 
     6     public void eat() {
     7         System.out.println("动物都需要吃东西");
     8     }
     9 
    10     public static void sleep() {
    11         System.out.println("动物需要睡觉");
    12     }
    13 
    14     public void run() {
    15         System.out.println("长腿的动物爱奔跑");
    16     }
    17 }
     1 //子类——Dog
     2 public class Dog extends Animal {
     3     int num = 5;
     4     static int age = 5;
     5     String name = "Tom";
     6 
     7     public void eat() {
     8         System.out.println("我爱吃狗粮");
     9     }
    10 
    11     public static void sleep() {
    12         System.out.println("我是一只不爱睡觉的活泼狗狗");
    13     }
    14 
    15     public void catchMouse() {
    16         System.out.println("我喜欢多管闲事");
    17     }
    18 
    19 }
     1 //测试类
     2 public class Demo_Test {
     3     public static void main(String[] args) {
     4         Animal a = new Dog();
     5         a.eat();
     6         a.sleep();
     7         a.run();
     8         
     9         System.out.println(a.num);
    10         System.out.println(a.age);
    11     }
    12 }

    注意事项演示:

    从上面的打印结果(7),我们可以得出:

    1)成员变量:打印父类,子类没有出来;

    2)成员方法:父类为静态的就打印父类,非静态的直接打印子类;

    3)在左侧5、6中有报错,是因为我们在调用静态成员时使用的方法不对。(下面会截图演示正确的)

    4)当调用父类里没有的方法时(a.catchMouse();),会报错。)

    此时,多态不能使用自己特有的属性和方法,这是多态的弊端,那要如何解决呢?

    答案:把这个父类引用指向子类对象a,再强制变回Dog类型。这样a就是Dog类型的引用了,指向的也是Dog对象了。

    个人学习笔记,针对本人在自学中遇到的问题。

  • 相关阅读:
    VS 2010 Addin 开发 1
    事件冒泡和默认事件
    闭包试验
    查询字符串中出现频率最高的几种方法
    JS函数中的参数
    a 项目已更新,b 项目可以基于这个项目处理
    windows 生成ssh 公钥 命令
    git fetch upstream 报错 XXX Permission denied (publickey). fatal: Could not read from remote repository
    考试的那点事儿
    MySQL数据库InnoDB存储引擎多版本控制(MVCC)实现原理分析
  • 原文地址:https://www.cnblogs.com/1693977889zz/p/7027207.html
Copyright © 2011-2022 走看看