zoukankan      html  css  js  c++  java
  • java面向对象编程(七)--四大特征之多态

    1、多态概念

    多态性是对象多种表现形式的体现。比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫、小狗、蜥蜴等等。那么我到宠物店说"请给我一只宠物",服务员给我小猫、小狗或者蜥蜴都可以,我们就说"宠物"这个对象就具备多态性。

    java中的多态,就是指一个引用(类型)在不同情况下的多种状态。也可以理解成,多态是指通过指向父类的指针,来调用在不同子类中实现的方法。也可以理解为“一个接口,多个方法”。

    实现多态有两种方式:1、继承;2、接口

    案例一:

    多态演示[Dome122.java]
    //演示继承、方法覆盖、多态
    public class Demo122 {
        public static void main(String[] args) {
            //非多态,创建对象,然后调用其方法
            Cat cat=new Cat();
            cat.cry();
            Dog dog=new Dog();
            dog.cry();
            //多态机制,可通过父类创建的对象调用子类的方法,即所谓的一个接口,多个方法
            Animal an=new Cat();
            an.cry();//显示猫猫叫
            an=new Dog();
            an.cry();//显示汪汪叫
        }
    }
    //动物类
    class Animal{
        String name;
        int age;
       //让外部的方法访问类内部(私有)的属性,需要将类内部的属性添加get和set方法
        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 cry(){
            System.out.println("不知道怎么叫");
        }
    }
    //创建Dog子类并继承Animal父类及覆盖cry方法
    class Dog extends Animal{
        //狗叫
        public void cry(){
            System.out.println("汪汪叫");
        }
    }
    class Cat extends Animal{
        //猫叫
        public void cry(){
            System.out.println("猫猫叫");
        }
    }

    案例二:

    /*
       多重多态演示[Dome123.java]
    */
    //演示子类继承父类、方法覆盖、多态方法
    public class Demo123 {
        public static void main(String[] args) {
            //非多态演示
            System.out.println("非多态演示:");
            Cat cat=new Cat();
            cat.cry();
            Dog dog=new Dog();
            dog.cry();
            System.out.println();        
            //多态演示
            System.out.println("多态演示:");
            Animal an=new Cat();
            an.cry();
            an=new Dog();
            an.cry();
            System.out.println();    
            //多重多态演示
            System.out.println("多重多态演示:");
            Master master=new Master();
            master.feed(new Dog(),new Bone());
            master.feed(new Cat(),new Fish());
        }
    }
    //主人类
    class Master{
        //给动物喂食物,使用多态,只要写一个方法
        public void feed(Animal an,Food f){
            an.eat();
            f.showName();
        }
    }
    //食物父类
    class Food{
        String name;
        public void showName(){
            System.out.println("食物");
        }
    }
    //食物鱼子类
    class Fish extends Food{
        public void showName(){
            System.out.println("鱼");
        }
    }
    //食物骨头子类
    class Bone extends Food{
        public void showName(){
            System.out.println("骨头");
        }
    }
    //动物类Animal父类
    class Animal{
        String name;
        int 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 cry(){
            System.out.println("不知道怎么叫");
        }
        //动物吃东西
        public void eat(){
            System.out.println("不知道吃什么");
        }
    }
    //创建Dog子类并extends继承Animal父类及覆盖cry方法
    class Dog extends Animal{
        //狗叫
        public void cry(){
            System.out.println("汪汪叫");
        }
        //狗吃东西
        public void eat(){
            System.out.println("狗爱吃骨头");
        }
    }
    class Cat extends Animal{
        //猫自己叫
        public void cry(){
            System.out.println("猫猫叫");
        }
        //猫吃东西
        public void eat(){
            System.out.println("猫爱吃鱼");
        }
    }

    多态--注意事项:

    1、java允许父类的引用变量引用它的子类的实例(对象)

    Animal an=new Cat();//这种转换时自动完成的
  • 相关阅读:
    systemd 介绍
    Goland读取配置文件--viper包
    Goland日志记录
    进程查询端口占用
    Python zip() 函数
    Jenkins权限管理(角色权限)
    Django ORM查询总结
    如何查看windows计算机重启记录
    Django ORM迁移
    Django中文乱码解决
  • 原文地址:https://www.cnblogs.com/Davis812/p/3920577.html
Copyright © 2011-2022 走看看