栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java面向对象------------多态

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java面向对象------------多态

多态:同类型的对象执行同一个行为,会表现出不同的行为特征(父类引用子类的对象)

多态的常见形式:
父类类型 对象名称 = new 子类构造器;

接口 对象名称 = new 实现类构造器;

多态中成员访问特点:

  1. 方法调用:编译看左边,运行看右边。
  2. 变量调用:编译看左边,运行也看左边(多态注重行为多态)。

多态的前提:

有继承/实现关系;有父类引用指向子类的对象;有方法重写。

多态的优势:

  1.  在多态形势下,右边对象可以实现解耦合,便于扩展和维护                                                               Aimal a = new Dog();                                                                                                              a.run();//后续业务行为随对象而变,后续代码无需修改
  2. 在定义方法的时候,使用父类型作为参考,该方法就可以接收这父类的一切子类对象,体现出多态的扩展性与便利。

多态先会产行的一个问题 

多态下不能使用子类的独有功能

多态下引用数据类型的类型转换 

  1.  自动类型转换(从子到父);子类对象赋值给父类类型的变量指向。
  2. 强制类型转换(从父 到子) 。此时必须进行强制类型转换,子类  对象变量 = (子类)父类类型的变量。

 作用:可以解决多态下的劣势,可以实现调用子类独有的功能

注意:如果转型后的类型和对象真实类型不是同一种类型,那么在转换的时候就会出现classCastException

 

Animal t = new Tortoise();
Dog d = (Dog)t;//出现异常 ClassCastException

 Java建议强转转换前使用instanceof判断当前对象的真实类型,再进行强制转换。

变量名 instanceof真实类型

判断关键字左边的变量指向的对象的真实类型,是否是右边的类型或者是其于子类类型,是则返回true,不是返回false。

示例:

     ---- 狗狗类

        增加狗狗吃东西的方法

        ---- 企鹅类

        增加企鹅吃东西的方法

        ---- 创建主人类

        编写给狗狗喂东西的方法

        编写给企鹅喂东西的方法

        ---- 编写测试方法

        调用主人类给狗狗喂东西的方法

        调用主人类给企鹅喂东西的方法

如果再领养XXX宠物,就需要给XXX喂食,怎么办?

        ---- 添加XXX类,继承Pet类,实现吃食方法

        ---- 修改Person类,添加给XXX喂食的方法
————————————————
版权声明:本文为CSDN博主「jason的java世界」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/flywithcan/article/details/122467678

public abstract class Pet {
    //吃东西
    public abstract void feed();

    public void show(){
        System.out.println("show......");
    }
}
public class Dog extends Pet{
    @Override
    public void feed() {
        System.out.println("狗在啃骨头");
    }
    public void Test(){
        System.out.println("Test......");
    }
}
public class Penguin extends Pet{
    @Override
    public void feed() {
        System.out.println("企鹅正在吃");
    }
}
public class Cat extends Pet{
    @Override
    public void feed() {
        System.out.println("猫在吃鱼...");
    }
}


public class Person {
//    public void feed(Dog dog){
//        dog.feed();
//    }
//    public void feed(Penguin penguin){
//        penguin.feed();
//    }
    public void feed(Pet pet){
        pet.feed();
    }
    public Pet getPet(String typeId){
        if (typeId.equals("0")){
            return new Dog();
        }else if (typeId.equals("1")){
            return new Penguin();
        }else{
            return new Cat();
        }
    }

    public static void main(String[] args) {
//        Person person = new Person();
//        Dog dog = new Dog();
//        person.feed(dog);
//        Penguin penguin = new Penguin();
//        person.feed(penguin);

            Person person = new Person();
            Pet dog = new Dog();
            person.feed(dog);
            dog.show();
            Pet penguin = new Penguin();
            person.feed(penguin);
            Cat cat = new Cat();
            person.feed(cat);

            Pet pet = person.getPet("1");
            if (pet instanceof Dog){
                System.out.println("领养的是狗");
            }else if(pet instanceof Penguin){
                System.out.println("领养的是企鹅");//仅供参考,违法的
            }else if(pet instanceof Cat){
                System.out.println("领养的是猫");
            }

    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/858148.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号