zoukankan      html  css  js  c++  java
  • 十五、Java基础之多态

    /*
    一、关于java语言中向上类型转型和向下类型转型:
    1.向上类型转型(upcasting):子--->父
    2.向下类型转型(downcasting):父--->子

    注意:无论是向上类型转型还是向下类型转型,两个类之间必须要有继承关系
    */
    Animal类
    public class Animal {
    
        public void m1(){
            System.out.println("动物喜欢睡觉!");
        }
    }

    Dog类

    public class Dog extends  Animal{
        public void m1(){
            System.out.println("狗喜欢叫!");
        }
    }

    Cat类

    public class Cat extends Animal{
    
        public void m1(){
            System.out.println("猫喜欢喵!");
        }
    
        public void move(){
            System.out.println("猫喜欢吃老鼠!");
        }
    }

    测试:

    public class Test02 {
    
        public static void main(String[] args){
    
            //向上类型转型又被称作:自动类型转换
            //父类型的引用指向子类型的对象
            //程序分为两个阶段:编译阶段,运行阶段
            //程序编译阶段只知道是一个Aninmal类型引用
            //程序在运行时期,堆中的实际对象时Cat类型
            Animal a=new Cat();
    
            //程序在编译阶段a被编译器看做是Animal类型
            //所以程序在编译器a引用绑定的是Animal类型中的m1方法(静态绑定)
            //程序运行时,堆中的对象实际上是cat类型,而cat类型已经重写了方法m1方法
            //所以程序在运阶段对象绑定的是cat方法中的m1方法(动态绑定)
            a.m1();//猫喜欢喵!
    
            //向下类型转换,强制转换类型
            Animal a1=new Cat();//向上类型转换
            //强制类型转换,需要加强制类型转换符
            Cat c=(Cat) a1;
            c.move();
    
    
    
    
    
        }
    }

     二、关于多态的好处

    1.多态:父类型的引用指向子类型的对象

    多态:
    1.使用多态可以使代码的耦合度降低
    2.项目的扩展功能增强

    例子1:主人,宠物,测试程序
    /*
    模拟主人
    
     */
    public class Person {
    
        public void feed(Dog d){
            d.eat();
        }
    
        public void feed(Cat c){
            c.eat();
        }
    
        
    }
    /**/
    public class Dog {
    
        public void eat(){
    
            System.out.println("狗吃东西!");
        }
    }
    //测试程序
    public class Test01 {
    
        public static void main(String[] args){
    
            //创建主人
            Person p=new Person();
    
            //创建宠物
            Dog d=new Dog();
            Cat c=new Cat();
    
            p.feed(d);
            p.feed(c);
        
        }
    }

    再加一只宠物

    public class Cat {
        public void eat(){
    
            System.out.println("猫吃东西!");
        }
    }

    程序改进

    //person类型的扩展能力太差
    //尽量不要面向具体和编程,面向父类型编程,面向抽象编程
    因此加一种类型:Animal,这样Person就不需要变动
    /*
    模拟主人
    多态:父类型的引用指向子类型的对象
    
    多态:
        1.使用多态可以使代码的耦合度降低
        2.项目的扩展功能增强
     */
    public class Person {
    
    //    public void feed(Dog d){
    //        d.eat();
    //    }
    //
    //    public void feed(Cat c){
    //        c.eat();
    //    }
    
        //person类型的扩展能力太差
        //尽量不要面向具体和编程,面向父类型编程,面向抽象编程
        public void feed(Animal a){
            a.eat();
        }
    }
    /*
    Animal
    */
    public class Animal {
    
        public void eat(){}
    }
    /*
    狗,继承Animal
     */
    public class Dog extends Animal {
    
        public void eat(){
    
            System.out.println("狗吃东西!");
        }
    }
    //猫继承Aninal
    public class Cat extends Animal{
    
        public void eat(){
    
            System.out.println("猫吃东西!");
        }
    }
    //测试程序
    public class Test01 {
    
        public static void main(String[] args){
    
            //创建主人
            Person p=new Person();
    
            //创建宠物
            Dog d=new Dog();
            Cat c=new Cat();
    
            //升级
            //
            p.feed(d);
            p.feed(c);
        }
    }
     
  • 相关阅读:
    基于ZooKeeper和Thrift构建动态RPC调用
    菜鸡的Java笔记 api 文档
    菜鸡的Java笔记 第二十四
    菜鸡的Java笔记 第二十三
    菜鸡的Java笔记 第二十二
    菜鸡的Java笔记 实践
    Python 函数 参数传递
    python 函数的定义及调用语法,map 方法,函数嵌套递归
    java关键字
    菜鸡的Java笔记 第二十一 final 关键字
  • 原文地址:https://www.cnblogs.com/chushujin/p/10053874.html
Copyright © 2011-2022 走看看