JavaOOP 03 多态

多态是面向对象编程的重要特性,允许父类引用调用子类重写的方法。它包括子类到父类的向上转型,可以自动调用引用对象的方法,以及父类到子类的向下转型,需强制转换并能调用子类特有的方法。多态提供了可替换性、可扩展性、灵活性和简化性。instanceof运算符用于判断对象是否为指定类或其子类的实例。
摘要由CSDN通过智能技术生成

三、多态

3.1 实现多态

3.1.1 什么是多态

  • 多态性是面向对象编程的又一个重要特征
  • 是指在父类中定义的属性和方法被子类继承之后,具有表现多种形态的能力特征

3.1.2 多态的定义和实现

  • 一个特定类型的变量可以引用不同类型的对象,并且能够自动地调用引用对象的方法

  • 也可以根据作用到不同对象类,相应不同的操作

  • 可以使用父类的对象调用到子类当中被重写的方法

1. 子类到父类的转换( 向上转型 )

  • 子类到父类的转换被称为向上转型

  • 语法 :< 父类型 > <引用变量名> =new < 子类型 >()

​ 类似于把int类型转为double类型

  • 代码演示

​ 父类 Animal类

public class Animal {
    //动物名称
    String name;
    public void eat(){
        System.out.println(this.name+"正在吃");
    }
}

​ 子类1 Dog类

public class Dog extends Animal{

    public void eat(){
        name="狗";
        System.out.println(this.name+"正在吃骨头");
    }
}

​ 子类2 Cat类

public class Cat extends Animal{
    public void eat(){
        name="猫";
        System.out.println(this.name+"正在吃桃子");
    }
}

	运行类 Application类
public class Application {
    public static void main(String[] args) {
        Animal animal=new Animal();
        //多态
        Animal cat=new Cat();
        Animal dog=new Dog();
        animal.eat();
        cat.eat();
        dog.eat();
    }
}

  • 将子类作为对象传给父类,父类可直接调用子类当中重写过父类的方法
  • 父类不可以调用子类当中特有的方法
  • 向上转型的两种形式
    • 使用父类作为方法参数实现
    • 使用父类作为方法返回值实现

2. 父类到子类的转换(向下转型)

  • 当父类想要调用子类特有的方法时,可以使用向下转型

  • 向上转型之后,无法使用子类当中特有的方法

  • 使用向下转型,可以调用子类当中特有的方法

  • 可以将父类专为子类,但是必须进行强制转换

  • 语法 :

< 父类型 > <父类引用变量名> =new < 子类型>()

<子类型> <子类引用变量名> = (<子类型>) 父类引用变量名

父类 Animal类

public class Animal {
    //动物名称
    String name;
    public void eat(){
        System.out.println(this.name+"正在吃");
    }
}

​ 子类1 Dog类

public class Dog extends Animal{

    public void eat(){
        name="狗";
        System.out.println(this.name+"正在吃骨头");
    }
    public void play(){
        name="狗";
        System.out.println(this.name+"正在玩耍");
    }
}
	运行类 Application类
public class Application {
    public static void main(String[] args) {
        Animal animal=new Animal();
        //多态
        Animal ani1=new Dog();
        Dog dog=(Dog)ani1;
        dog.eat();
        dog.play();
    }
}

综上所述,向下转型的父类,可以调用子类当中所有的方法

实现多态的三要素

1.继承关系的父类和子类

2.子类重写父类方法

3.父类的引用指向了子类对象

3.1.3 多态的优势

**1. 可替换性 :**多态对已存在的代码具有替换性

**2. 可扩展性:**增加新的子类不影响已存在类的多态性、继承性,已经其他特性的运行和操作。

**3. 灵活性 :**在多态在应用中,体现了灵活多样性,提高了使用效率

**4. 简化性 :**多态简化了应用软件的代码编写和修改过程,尤其是在处理大量对象的运算和操作 时,尤为突出

3.1.4 instanceof 运算符

  • 如果父类在进行向下转型时,没有转换为真实的子类类型,就会出现转换异常

  • 语法 :对象 instanceof 类

    • 左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。
  • instanceof 运算符一般用于对象的强制转换,判断子类是否是真实的子类类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值