zoukankan      html  css  js  c++  java
  • java中的多态

    知识点:多态的概念、java中多态的使用(方法重载和重写、子类对象的多态性) 、多态使用的好处

    一:什么是多态

    一种事物的多种存在形态,比如说男人和女人都是人,人可以分为男人和女人

    二:java中多态的使用场景

    (1)方法的重载和重写

    (2)子类对象的多态性

    使用前提:a.有类的继承 b.由子类对父类方法的重写

    使用方式:通过父类的引用指向子类的对象

    public class Person {
    public void eat(){
    System.out.println("人吃饭");
    }
    }
    class Man extends Person{
    public void eat(){
    System.out.println("男人吃饭");
    }
    }
    //子类对象的多态性使用前提:1.要有类的继承 2.要有子类对父类方法的重写
    public class Test {
    public static void main(String[] args) {
       //子类对象的多态性:父类的引用指向子类对象
    Person p=new Man();//向上转型
    //虚拟方法调用:通过父类的引用指向子类对象的实体,调用方法时,实际执行子类重写父类的方法
    p.eat();
        }
    },
    子类多态性的使用,是使用父类的引用,指向子类的对象,然后虚拟方法调用子类重写父类的方法
    此外补充一下:子类对象的多态性,并不适用于属性
    public class Person {
    int id=101;
    public void eat(){
    System.out.println("人吃饭");
    }
    }
    class Man extends Person{
    int id=102;
    public void eat(){
    System.out.println("男人吃饭");
    }
    }
    public class Test {
    public static void main(String[] args) {
    Person p=new Man();
    p.eat();
    System.out.println(p.id);//输出的是Person对象的id属性
    }
    }
    程序执行结果:


    三:多态使用的好处
    消除了类之间的耦合关系
    大大提高了程序的简洁性和可拓展性
    public class Person {
    int id=101;
    public void eat(){
    System.out.println("人吃饭");
    }
    public void drink(){
    System.out.println("人喝水");
    }
    }

    class Man extends Person{
    int id=102;
    public void eat(){
    System.out.println("男人吃饭");
    }
    public void drink(){
    System.out.println("男人喝水");
    }
    public void smoking(){
    System.out.println("男人抽烟");
    }

    }

    class Woman extends Person{
    public void eat(){
    System.out.println("女人吃饭");
    }
    public void drink(){
    System.out.println("女人喝水");
    }
    public void shoping(){
    System.out.println("女人购物");
    }
    }
    public class Test {
    public static void main(String[] args) {
    Test test=new Test();
    test.show(new Person());
    test.show(new Man());//Person p=new Man()如果不能使用多态的话,那么想实现show()方法传入Man和Woman的对象,在调用方法的话,得再写另外写两个各自的show()方法
    test.show(new Woman());
    }
    public void show(Person p){
    p.eat();
    p.drink();
    System.out.println(p.id);
    //对象a instanceof 类A 判断对象a是否是类A的一个实例是的话返回true,否的话返回false
    if(p instanceof Man){
    Man man=(Man)p;//向下转型,使用强转符
    man.smoking();
    }
    if(p instanceof Woman){
    Woman woman=(Woman) p;//向下转型,使用强转符
    woman.shoping();
    }
    }
    }

    如果上面main方法中,test.show(new Man()); 和test.show(new Woman());
    调用show()方法只能传Person对象的实例,不能使用子类对象的多态性,那么想实现show()方法传入Man和Woman的对象都调用方法的话,
    得再写另外写两个各自的show()方法,这样代码冗余不简洁
  • 相关阅读:
    Spring MVC 核心组件详解
    Spring MVC 入门就这一篇
    Spring 事务解决方案
    【UGUI源码分析】Unity遮罩之Mask详细解读
    游戏开发中不同时区下的时间问题
    ARTS第十三周(阅读Tomcat源码)
    Win10 电脑安装.NET低版本提示“这台计算机中已经安装了 .NET Framwork 4.6.2或版本更高的更新”问题
    Dynamics 365 Setup 提示SqlServer 存在
    Dynamics CRM "Verification of prerequisites for Domain Controller promotion failed. Certificate Server is installed."
    Dynamics CRM
  • 原文地址:https://www.cnblogs.com/ydbk/p/14052237.html
Copyright © 2011-2022 走看看