前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java-面向对象(多态)

Java-面向对象(多态)

作者头像
DataScience
发布2020-05-07 18:26:26
4570
发布2020-05-07 18:26:26
举报
文章被收录于专栏:A2DataA2Data

4.7、多态

前提

多态的前提:

  • 子父类继承关系
  • 方法的重写
  • 父类引用指向子类对象

动态绑定:运行期间调用的方法,是根据具体的类型,具体的方法 优缺点:

  • 优点:可以提高可维护性(多态前提所保证的),提高代码的可扩展性
  • 缺点:无法直接访问子类特有的成员
代码语言:java
复制
package com.a2data;

/**
 * Created by JackFeng on 2020/3/15.
 */
public class PoymorphicDemo {
    public static void main(String[] args) {
//        Cat cat = new Cat();
//        cat.eat();

        // 父类引用  Animal a
        // 指向  =
        // 子类对象  new Cat()
        // 动态绑定
        Animal a = new Cat();
        a.eat();


    }


}

class Animal {
    public void eat(){
        System.out.println("c吃东西");
    }
}

class Cat extends Animal{
    public void eat(){
        System.out.println("猫吃鱼");
    }
}

特点

多态的成员特点:

  • 成员变量
    • 编译时看的是左边,运行时看的是左边
  • 成员方法
    • 编译时看的是左边,运行时看的是右边
  • 静态方法
    • 编译时看的是左边,运行时看的是左边

    编译时看的都是左边,运行时成员方法看的是右边,其他(成员变量和静态方法)看的都是左边

代码语言:java
复制
package com.java;

import java.util.Date;

/**
 * Created by JackFeng on 2020/3/15.
 */
public class PoymorphicDemo {
    public static void main(String[] args) {

        // 成员变量
        // 在继承中没有被重写的概念,没有动态绑定的概念
        // 执行的是父类的

        Dad d = new Kid();
        System.out.println(d.num);


        // 成员方法
        // 运行看右边
        System.out.println("----------");
        d.method();

        // 静态方法
        d.function(); // 使用变量去调用静态方法,相当于用变量类型的类名去调用  所以输出父类的静态方法


    }
}


class  Dad{
    int num = 1;


    public void method(){
        System.out.println("我是父类的方法");
    }

    public static void function(){
        System.out.println("我是父类的静态方法");
    }

}

class Kid extends Dad{
    int num = 21;

    public void method(){

        System.out.println("我是子类的方法");
    }

    public static void function(){
        System.out.println("我是子类的静态方法");
    }

}

多态转型

多态中的向上转型和向下转型:

  • 引用类型之间的转换
    • 由大到小
    • 由小到大(子类型转换成父类型)
    • 向上转型
    • 向下转型
  • 基本数据类型的转换
    • 由大到小
    • 由小到大
    • byte short char -- int --- long --- float -- double
    • 自动类型转换
    • 强制类型转换
代码语言:java
复制
package com.java;

/**
 * Created by JackFeng on 2020/3/15.
 */
public class polymorphicDemo {
    public static void main(String[] args) {

        Animal a = new Dog(); // 向上转型
        a.eat();


        Dog d = (Dog) a; // 向下转型  本身是什么类型 转换成什么类型
        d.swim();

    }
}


class Animal{
    public void eat(){
        System.out.println("吃东西");
    }

}


class Dog extends  Animal{

    public void eat(){
        System.out.println("啃骨头");
    }

    public void swim(){
        System.out.println("狗刨");
    }

}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataScience 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4.7、多态
    • 前提
      • 特点
        • 多态转型
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档