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

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

  • 相关阅读:
    vue 初始化项目模板报错
    092117-6265-01.dmp 蓝屏日志文件
    电信流氓注入JS
    DISM
    node.js
    Adobe ZXPInstaller 报错 Installation failed because of a file operation error.
    Microsoft Edge 针对 Web 开发人员更新日志
    What's new in Safari 11.0
    CSS Filter
    accept-language
  • 原文地址:https://www.cnblogs.com/Anonymity-zhang/p/14307212.html
Copyright © 2011-2022 走看看