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()方法,这样代码冗余不简洁
  • 相关阅读:
    vue脚手架项目配置后端接口(mock数据)
    list添加删除动画(transition-group)
    fast mock官网mock数据
    vuex日志插件(createLogger)
    环形进度条
    程序员的周末生活
    hbase错误之Region in transition异常解决
    不同虚拟机之间的文件传递
    windows上链接虚拟机
    hadoop——yarn
  • 原文地址:https://www.cnblogs.com/ydbk/p/14052237.html
Copyright © 2011-2022 走看看