多态及其应用+向下转型

多态的主要形式:

  1. 方法重写(Override):

    • 子类可以重写父类中的方法,使得父类的引用可以调用子类的方法,表现出不同的行为。
      // 父类
      class Animal {
          public void makeSound() {
              System.out.println("Animal makes a sound");
          }
      }
      
      // 子类
      class Dog extends Animal {
          @Override
          public void makeSound() {
              System.out.println("Dog barks");
          }
      }
      
      // 测试
      public class TestPolymorphism {
          public static void main(String[] args) {
              Animal animal = new Dog(); // 多态:使用父类引用指向子类对象(继承加重写)
              animal.makeSound(); // 调用的是实际对象的方法,输出:Dog barks
          }
      }
      

      多态应用两种方法:

    • 父类类型作为方法形参实现多态,使方法参数的类型更为广泛

    • 使用父类作为方法返回值实现多态,使方法可以返回不同子类对象。

      // 父类
      class Animal {
          public void makeSound() {
              System.out.println("Animal makes a sound");
          }
      }
      
      // 子类1
      class Dog extends Animal {
          @Override
          public void makeSound() {
              System.out.println("Dog barks");
          }
      }
      
      // 子类2
      class Cat extends Animal {
          @Override
          public void makeSound() {
              System.out.println("Cat meows");
          }
      }
      //测试应用一
      public class test {
      	public void eated(Animal ani) {  //父类类型作为形参,指向子类对象
      		ani.makeSound();// 调用子类方法
      	}
      public static void main(String[] args) {
      	
      		test test1=new test();
      		test1.eated(new Cat());
      	
      }
      }
      //测试应用二
      public Animal getAnimal(String type){//使用父类作为方法返回值实现多态,使方法可以返回不同子类对象。
      if(type.equals(cat)){
      return new Cat();
      }else{
      return new Dog()}
      
      }

      向下转型是从一个父类类型转换为其子类类型的过程。在 Java 中,如果有一个父类的引用指向一个子类的对象,可以使用向下转型将父类引用转换为子类引用,以便调用子类特有的方法或访问子类特有的属性。需要注意的是,进行向下转型时,最好先使用 instanceof 进行类型检查,以避免类型转换异常。如果对象确实是目标类型的实例,那么向下转型就是安全的;否则,可能会抛出 ClassCastException 异常。

      class Animal {
          public void eat() {
              System.out.println("Animal is eating");
          }
      }
      
      class Dog extends Animal {
          public void bark() {
              System.out.println("Dog is barking");
          }
      }
      
      public class Main {
          public static void main(String[] args) {
              Animal animal = new Dog();  // 向上转型
              animal.eat();  // 调用父类方法
      
              // 向下转型
              if (animal instanceof Dog) {
                  Dog dog = (Dog) animal;  // 向下转型
                  dog.bark();  // 调用子类特有的方法
              }
          }
      }
      

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值