zoukankan      html  css  js  c++  java
  • java_多态

    1.多态的定义

    2.多态的使用

    //父类
    public class Person {
        String name;
        int age=18;
        int id=1001;
        
        public void eat() {
            System.out.println("人 : 吃饭");
        }
        public void walk() {
            System.out.println("人 : 走路");
        }
    }
    
    //子类1
    public class Man extends Person{
        
        boolean isSmoking;
        int id=1002;
        
        public void earnMoney() {
            System.out.println("男人负责挣钱养家");
        }
        public void eat() {
            System.out.println("男人 : 多吃吃饭");
        }
        public void walk() {
            System.out.println("男人 : 多走走路");
        }
    }
    
    //子类2
    ublic class Woman extends Person{
    
        boolean isBeauty;
        
        public void goShopping() {
            System.out.println("女人喜欢购物");
        }
        public void eat() {
            System.out.println("女人 : 少吃吃饭");
        }
        public void walk() {
            System.out.println("女人 : 少走走路");
        }
    }
    
    //测试类
    public class PersonTest {
        public static void main(String[] args) {
            //非多态
            Person p1 = new Person();
            p1.eat();
            
            Man man1 = new Man();
            man1.age=25;
            man1.earnMoney();
            
            System.out.println("**********************************************");
            
            //多态 : 父类引用指向子类对象
            Person p2 = new Man();
            // 只能调用 子类重写过的方法
            
            // 注 : 编译看左 , 运行看右   (当你ctrl点击p2.eat()方法时 , 会发现进入了Person类)
            p2.eat();
            p2.walk();
            
            Person p3 = new Woman();
            p3.eat();
            p3.walk();
            
            System.out.println(p2.id);// 1001 说明 : java的多态性 只适用于方法 , 不适用于属性.
         }
    }

    3.为什么要有多态 ?

    //多态举例
    public class AnimalTest {
        public static void main(String[] args) {
             AnimalTest test = new AnimalTest();
             //多态性
             test.method1(new Dog());
             test.method1(new Cat());
        }
         //多态性
        public void method1(Animal animal) {
            animal.eat();
            animal.shout();
        }
        
        //若无多态性 ( 如果有几十个子类 , 岂不是要重载几十次method1方法 ? )
        public void method1(Dog dog) {
            dog.eat();
            dog.shout();
        }
        public void method1(Cat cat) {
            cat.eat();
            cat.shout();
        }
    }
    
    class Animal {
        public void eat() {
            System.out.println("吃东西");
        }
    
        public void shout() {
            System.out.println("动物叫");
        }
    }
    
    class Dog extends Animal {
        public void eat() {
            System.out.println("狗吃骨头");
        }
    
        public void shout() {
            System.out.println("汪!汪!汪");
        }
    }
    
    class Cat extends Animal {
        public void eat() {
            System.out.println("猫吃鱼");
        }
    
        public void shout() {
            System.out.println("喵!喵!喵");
        }
    }

    总结  : 因为有了多态 , 可以少写很多重复性的代码 !

  • 相关阅读:
    linux查看日志文件内容命令tail、cat、tac、head、echo
    改变自己的128种方法,教你变得更优秀!
    php 23种设计模式
    Swoole消息推送
    PHP 出现 502 解决方案
    【centos7】添加开机启动服务/脚本
    curl 参数配置详解
    i系列标准-互联网周刊
    MySQL 设计与开发规范2
    Cocos Creator webviw网页置顶增加返回键的方法
  • 原文地址:https://www.cnblogs.com/Anonymity-zhang/p/14307212.html
Copyright © 2011-2022 走看看