java之多态

java之多态

什么是多态

  • 多态是一种操作现象,同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。

为什么要用多态

  • 可以解决紧耦合的问题。相对来说代码比较独立。

  • 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类方法进行复写即可。大大提高程序的可复用性。

  • 可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。(真正好处)。

    //父类:动物类
    class Animal{
        public void eat(){
            System.out.println("eat");
        }
        public void sleep(){
            System.out.println("sleep");
        }
    }
    //猫类
    class Cat extends Animal{
        //方法重写
        public void eat(){
            System.out.println("狗吃肉");
        }
        //方法重写
        public void sleep(){
            System.out.println("狗坐着睡");
        }
    }
    //狗类
    class Dog extends Animal{
        public void eat(){
            System.out.println("猫吃鱼");
        }
        public void sleep(){
            System.out.println("猫趴着睡");
        }
    }
    //添加猪类
    class Pig extends Animal{ 
            public void eat(){
            System.out.println("猪吃白菜");
        }
        public void sleep(){
            System.out.println("猪躺着睡");
        }
    }
    
    //针对动物操作的工具类
    class AnimalTool{
        private AnimalTool(){}
        public static void feedAnimal(Animal a){  
            a.eat();   
            a.sleep();
        }
    }
    
    /*测试类
      测试类里面不放其他东西(如,定义其他方法)!只能是建对象,调方法。
      所以新定义了个操作动物的工具类去放feedCat(),feedDog()方法。
    */
    class DuotaiTest2{
        public static void main(String[] args){
            //我喜欢猫,我养3只猫
            Cat c= new Cat();
            Cat c2= new Cat();
            Cat c3= new Cat();
            AnimalTool.feedAnimal(c);
            AnimalTool.feedAnimal(c2);
            AnimalTool.feedAnimal(c3);
            System.out.println("---------------");
    
            //我喜欢狗,我养3只狗
            Dog d= new Dog();
            Dog d2= new Dog();
            Dog d3= new Dog();
            AnimalTool.feedAnimal(d);
            AnimalTool.feedAnimal(d2);
            AnimalTool.feedAnimal(d3);
            System.out.println("---------------");
            Pig p= new Pig();
            AnimalTool.feedAnimal(p);
    
        }
    }
    

分析

封装可以隐藏细节,提高复用性体现在相互调用上,继承扩展已存在代码,提高代码复上

private void tell(){
    .....
}
public void persontell(){
    tell()
    ......
}

编译和运行细节

Fu f= new Zi();
  • 成员变量:编译看左边,运行看右边
  • 构造方法:创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。
  • 成员方法:编译看左边,运行看右边。(方法重写的意义)
  • 静态方法:编译看左边,运行看左边。静态重写算不上重写。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值