zoukankan      html  css  js  c++  java
  • Java面向对象--多态

    多态

    笔记要点


    多态:同一个对象拥有多种形态
    
    作用:把不同的数据类型进行统一,让程序有超强的扩展性
    
    
    小知识点:
    
    1. 把子类的对象赋值给父类的变量 --> 向上转型
       
       缺点:屏蔽掉子类中特有的方法
       
    2. 把父类的变量转化回子类的变量 --> 向下转型
    
       向下转型有可能有风险,java要求必须要写强制类型转换
       
       语法:(转换之后的数据类型)变量
    

    实践代码


    Client类
    public class Client {
      public static void main(String[] args) {
    //        Cat c = new Cat();
    //        Dog d = new Dog();
    //
    //        Person p = new Person();
    //        p.feedCat(c);
    //        p.feedDog(d);
          Cat c = new Cat(); // 创建一只猫
          // 可以把猫当作动物来看,把子类的对象赋值给对象的引用(变量)向上转型
          // 向上转型会屏蔽掉子类中特有的方法
          Animal cat = new Cat();
          Animal dog = new Dog();
          Animal elephant = new Elephant();
    
          // 向下转型前,站在动物的角度是不能抓老鼠的
          //cat.catchMouse();
    //      Person person = new Person();
    //      person.feed(cat);
    //      person.feed(dog);
    //      person.feed(elephant);
    
          // 多态: 把不同的数据类型进行统一
    
          // 向下转型
          Cat cc = (Cat) cat;
          cc.catchMouse(); // 猫又可以抓老鼠了
    
        }
    }
    
    
    Animal类
    public class Animal {
        public void eat() {
            System.out.println("猫吃鱼");
        }
    }
    
    
    Person类
    public class Person {
        public void feed(Animal animal) { //接受到的所有动物都是animal
            animal.eat();
        }
    //    public void feedCat(Cat c) {
    //        c.eat();
    //    }
    //    public void feedDog(Dog d) {
    //        d.eat();
    //    }
    //    public void feedElephant(Elephant e) {
    //        e.eat();
    //    }
    }
    
    
    Cat类
    // 猫是一种动物 --> 继承关系
    public class Cat extends Animal{
        public void eat() {
            System.out.println("猫吃鱼");
        }
        public void catchMouse() {
            System.out.println("猫喜欢抓老鼠");
        }
    }
    
    
    Dog类
    public class Dog  extends Animal{
        public void eat() {
            System.out.println("狗吃骨头");
        }
    }
    
    
    Elephant类
    public class Elephant extends Animal{
        public void eat() {
            System.out.println("大象吃香蕉");
        }
    }
    
    
  • 相关阅读:
    Executors提供的四种线程池和自定义线程池
    ava8并发教程:Threads和Executors
    Java 信号量 Semaphore 介绍
    Condition-线程通信更高效的方式
    ReentrantLock详解 以及与synchronized的区别
    FutureTask 源码解析
    Java多线程编程:Callable、Future和FutureTask浅析
    Callable 和 Runnable 的区别
    javascript之url转义escape()、encodeURI()和decodeURI()
    yii2.0安装ElasticSearch及使用
  • 原文地址:https://www.cnblogs.com/isChenJY/p/12780748.html
Copyright © 2011-2022 走看看