您的位置 首页 java

Java面试基础回顾17-多态

面向对象的三大特征:封装、继承、多态。

规则: 父类类型 对象名称 = new 子类构造器 或者 接口 对象名称 = new 实现类构造器

概念: 同一个类型的对象,执行同一个行为,在不同的状态下会表现出不同的行为特征。

 /**
 * 多态测试
 */public class Demo {
    public static void main(String[] args) {
        //都是属于Animal对象
        Animal  Dog  = new Dog();
        //都执行eat行为表现出不同的行为特征
        dog.eat();

        Animal cat = new Cat();
        cat.eat();
    }
}

/**
 * Cat子类
 */class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

/**
 * Dog子类
 */class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}

/**
 * 父类
 */class Animal{
    public void eat(){
        System.out.println("动物吃东西");
    }
}  

运行结果:

多态表现出不同的行为特征

条件:

1.必须存在继承或者实现关系。

2.必须是父类类型变量引用子类类型的对象。

3.需要存在方法重写。

优点: 子类对象的改变,业务功能也随之改变,便于功能的扩展和维护,可以实现类与类之间的 解耦

 /**
 * 多态测试
 */public class Demo {
    public static void main(String[] args) {
        //都是属于Animal对象
        Animal dog = new Dog();
        //都执行eat行为表现出不同的行为特征
        dog.eat();

        Animal cat = new Cat();
        cat.eat();

        go(dog);
        go(cat);
    }

    /**
     * 使用父类类型对象作为形参,可以灵活的传入子类类型的对象
     * 从而实现不同的行为特征
     * @param animal
     */    public static void go(Animal animal){
        System.out.println("begin");
        animal.eat();
        System.out.println("done");
    }
}
/**
 * Cat子类
 */class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }
}

/**
 * Dog子类
 */class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}

/**
 * 父类
 */class Animal{

    public void eat(){
        System.out.println("动物吃东西");
    }
}  

缺点: 多态情况下,不能直接调用子类特有的功能,因为父类没有。 但是也有解决办法,就是父类对象强制转换为子类对象然后调用子类特有的方法。

文章来源:智云一二三科技

文章标题:Java面试基础回顾17-多态

文章地址:https://www.zhihuclub.com/197296.shtml

关于作者: 智云科技

热门文章

网站地图