• 面向对象特征之多态性


    面向对象的多态性:

    1.多态性理解为一个事物多种表现形态

      ①. 方法的重载与重写为多态性的表现

      ②.子类对象的多态性

    2.子类对象的多态性使用的前提:①要有类的继承

                                                          ②子类要有对父类方法的重写

    3.程序运行分为编译状态和运行状态。

                      对于多态性来说,编译时,看左边,将此引用变量理解为父类的类型

                      运行时,看右边,关注对象的实体:子类的对象,那么执行的方法就是子类重写的。

    4.子类对象的多态性,并不适用于属性

    // instanceof:
    // 格式:对象a instanceof 类A :判断a是否是类A的一个实例,是的话,返回true,否则返回false
    // 若a是A的实例, 那么a也一定是A类的父亲的实例

    Person:

    package com.aff.java1;
    
    public class Person {
        private String name;
        private int age;
    
        public Person() {
            super();
        }
    
        public Person(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public void walk() {
            System.out.println("走路");
        }
    
        public void eat() {
            System.out.println("吃");
        }
    
    }

    Man:

    package com.aff.java1;
    
    public class Man extends Person {
        private boolean smoking;
    
        public Man() {
            super();
        }
    
        public Man(String name, int age) {
            super(name, age);
        }
    
        public boolean isSmoking() {
            return smoking;
        }
    
        public void setSmoking(boolean smoking) {
            this.smoking = smoking;
        }
    
        public void walk() {
            System.out.println("直走");
        }
    
        public void eat() {
            System.out.println("吃菜");
        }
    
        public void entertainment() {
            System.out.println("请客");
        }
    
    }

    Woman:

    package com.aff.java1;
    
    public class Woman extends Person {
        private boolean beauty;
    
        public Woman(boolean beauty) {
            super();
            this.beauty = beauty;
        }
    
        public Woman() {
            super();
        }
    
        public boolean isBeauty() {
            return beauty;
        }
    
        public void setBeauty(boolean beauty) {
            this.beauty = beauty;
        }
    
        public void walk() {
            System.out.println("慢走");
        }
    
        public void eat() {
            System.out.println("吃水果");
        }
    
        public void shooping() {
            System.out.println("购物");
    
        }
    }

    TestPerson:

    package com.aff.java1;
    
    public class TestPerson {
        public static void main(String[] args) {
            Person p = new Person();
            p.eat();
            p.walk();
    
            Man m = new Man();
            m.eat();
            m.walk();
    
            // 子类对象的多态性:父类的引用指向子类对象
            // 也可以说子类对象的实体赋给父类对象的引用
            Person p1 = new Man();// 向上转型
            // 虚拟方法调用:通过父类的引用指向子类的对象实体,当调用方法时,实际执行的是子类重写父类的方法
            p1.eat();
            p1.walk();// 吃菜 直走 输出的为 new man
    
            // p1.entertainment(); 调不出来的 应为没有继承 person没有这个方法
    
            Person p2 = new Woman();
            p2.eat();
            p2.walk();
            // p2.shooping(); 同理调用不了,但是可以使用向下转型
    
            // 这样理解 父类的为上 , 子类为下
            Woman w = (Woman) p2;// 向下转型, 父类person转换为woman了
            w.shooping();
    
            // instanceof:
            // 格式:对象a instanceof 类A :判断a是否是类A的一个实例,是的话,返回true,否则返回false
            // 若a是A的实例, 那么a也一定是A类的父亲的实例
            if (p1 instanceof Woman) {
                System.out.println("能进来");
                Woman w1 = (Woman) p1;
                w1.shooping();
            }
            if (p1 instanceof Man) {
                Man m1 = (Man) p1;
                m1.entertainment();
            }
            if (p1 instanceof Person) {
                System.out.println("进来了");
            }
        }
    }
    All that work will definitely pay off
  • 相关阅读:
    poll系统调用的内核态实现机制分析
    Tomcat与web程序结构与Http协议
    关于java的环境变量的一点总结
    我想成为大牛,第一队,不要单打独斗
    ubuntu12.04单卡server(mentohust认证)再加上交换机做路由软件共享上网
    写在程序猿的困惑(特别Java程序猿)入行一年,感觉我不知道接下来该怎么办才能不断进步的,寻求翼
    三大趋势在移动互联网发展
    031 二进制1的数量(keep it up, 看到这个问题,刚开始有点蒙)
    【Java】【Flume】Flume-NG阅读源代码AvroSink
    PHP中间uniqid在高并发重复问题
  • 原文地址:https://www.cnblogs.com/afangfang/p/12517591.html
Copyright © 2020-2023  润新知