zoukankan      html  css  js  c++  java
  • 面向对象特征之多态性

    面向对象的多态性:

    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
  • 相关阅读:
    Valid Palindrome
    LeetCode: Path Sum 2
    LeetCode: Path Sum
    LeetCode:Convert Sorted Array to Binary Search Tree
    LeetCode:Convert Sorted List to Binary Search Tree
    LeetCode: Balanced Binary Tree
    LeetCode: Maximum Depth of Binary Tree
    django文件上传,只上传一张
    URLError: <urlopen error [Errno 10061] >
    error: <class 'socket.error'>, [Errno 101] Network is unreachable: file: /usr/local/python2.7.12/lib/python2.7/socket.py line: 575
  • 原文地址:https://www.cnblogs.com/afangfang/p/12517591.html
Copyright © 2011-2022 走看看