zoukankan      html  css  js  c++  java
  • 多态

    1、多态的含义:多态是指对象的不同状态,编译时是一种(父类)状态,运行时又是另外一种(子类)状态,多态具体实在在子类继承父类的这一过程中。

    2、为什么要用多态:多态是当子类继承父类时,当父类要使用到子类的属性和方法时,就能体现多态的特性,父类可以借助子类拓展自己的属性和特征姿态

    3、多态的前提: 类与类之间有继承关系,且父类需要调用子类的方法和属性

    4、父类引用子类对象: father  f =  new son();

    5、向上转型:当父类引用子类对象时,f 可以调用 father 类里的方法和属性,称为向上转型,且是自动转换

    6、向下转型:当父类引用子类对象时,如果子类没有重写父类的方法,是自己独有的方法时,f 不可以调用 son 类里的方法,

       f 必须向下转型成son类型,才能调用子类属性和方法,是强制转换, son s = (son)f;

    a.案例一:向下转型

    package src;
    
    class father{
        int i ;
        public void fa()
        {
            System.out.println("I AM father!");
        }
    }
    
    class son extends father{
        int j ;
        public void a()
        {
            System.out.println("I AM son");
        }
    
        public void b()
        {
            System.out.println("I AM father,I can use my son method!");
        }
    
        //子类重写父类的fa方法
        @Override
        public void fa()
        {
            System.out.println("I AM override father fa() method!");
        }
    }
    
    public  class date4  {
       public static void main(String[] args){
           //定义一个父类(father)类型的 f 引用子类(son)对象
            father f = new son();
           //父类的引用可以调用父类的属性i和fa(),当子类重写父类的fa()方法,则调用的是子类的fa()方法
           System.out.println("我是父类属性"+":"+(f.i=20));
           //子类重写父类的fa()方法,父类的引用可以直接调用子类重写的fa()方法
           f.fa();
           //父类引用调用子类独有的的属性和方法前,需要强转成son类型
           son g = (son) f;
           System.out.println("我是父类调用子类属性,并赋值"+":"+(g.i=30));
           g.a();
           g.b();
    
       }
    }

    运行结果:

    我是父类属性:20
    I AM override father fa() method!
    我是父类调用子类属性,并赋值:30
    I AM son
    I AM father,I can use my son method!

      

    b.案例二:利用多态的设计原理,定义一个主人类master、宠物类pet、喂养feed类,实现主人喂宠物的一个场景,其中宠物类有dog、cat、snake。

    方法1:未使用多态实现

    public class duotai {
        public static void main(String[] args) {
            master zhangsan = new master();
            dog zangAo = new dog();
            cat boSiMao = new cat();
            snake python  = new snake();
            zhangsan.feed(zangAo);
            zhangsan.feed(boSiMao);
            zhangsan.feed(python);
    
        }
    }
    
    
    class master
    {
    
        public void feed (dog d)
        {
            d.eat();
        }
    
        public void feed (cat c)
        {
            c.eat();
        }
    
        public void feed (snake s)
        {
            s.eat();
        }
    }
    
    class dog {
        public void eat()
        {
            System.out.println("喂养狗狗吃骨头");
        }
    }
    
    
    class cat {
        public void eat()
        {
            System.out.println("喂养猫吃猫粮");
        }
    }
    
    
    class snake {
        public void eat()
        {
            System.out.println("喂养蛇吃青蛙");
        }
    }
    
    运行结果:
            喂养狗狗吃骨头
            喂养猫吃猫粮
            喂养蛇吃青蛙
    
                    

    方法2:利用多态

    public class main {
        public void main(String[] args) {
            Master person = new Master();
            person.feed(new Dog());
            person.feed(new Cat());
            person.feed(new Snake());
    
        }
    }
    
    class Master {
        public void feed (Feed f ) {
            f.eat();
        }
    }
    
    interface Feed {//多态接口,宠物都有吃的行为
         void eat();
    }
    
    class Dog implements Feed  {
        @Override
        public void eat()
        {
            System.out.println("喂养狗狗吃骨头");
        }
    
    }
    
    class Cat implements Feed  {
        @Override
        public void eat()
        {
            System.out.println("喂养猫猫吃猫粮");
        }
    }
    
    class Snake implements Feed  {
        @Override
        public void eat()
        {
            System.out.println("喂养蛇吃青蛙");
        }
    }

    运行结果:

    喂养狗狗吃骨头
    喂养猫猫吃猫粮
    喂养蛇吃青蛙

  • 相关阅读:
    AX2009 VS平台报表开发学习笔记(二)数据源
    字符集的问题
    php侧拉菜单,漂亮,可以向右或者向左展开,支持FF,IE
    ASP正则函数替换分页后的参数
    asp 图片正则 替换,替换前检查图片是不是本地地址的方法
    asp正则过滤重复字符串的代码
    PHP 正则 email语句详解
    签东软了
    东软医疗面试归来
    linux的svn co
  • 原文地址:https://www.cnblogs.com/ibear/p/12803888.html
Copyright © 2011-2022 走看看