• 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("喵!喵!喵");
        }
    }

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

  • 相关阅读:
    redis基本数据结构-集合set
    redis基本数据结构-列表
    redis基本数据结构-散列
    redis基本数据结构-字符串
    redis基础
    关于HTTP调用WCF传递DataTable参数的处理
    解决WCF跨域问题,及DataTable参数问题
    让WCF支持Http调用
    分页方法,始终只生成指定数量的页码
    CVE-2021-1675漏洞复现
  • 原文地址:https://www.cnblogs.com/Anonymity-zhang/p/14307212.html
Copyright © 2020-2023  润新知