java基础之面向对象多态性[24]

发布于:2023-01-04 ⋅ 阅读:(407) ⋅ 点赞:(0)

java基础之面向对象多态性[24]




一、什么是多态性?

多态性:对象在运行过程中的多种形态.面向对象三大特性之一,是抽象编程思维精髓所在,用抽象思维写代码,在运行过程中传入具体对象,同面向接口编程如出一辙.

多态可分为两类:

1.方法的重载和重写.
2.对象的多态性.

例如:使用父类引用指向子类对象(用大的类型去接受小的类型,向上转型,自动转换);父类通常都定义为抽象类或接口.

二、instanceof关键字

用于检查对象是否为指定的类型,通常把父类引用强制转换成子类引用时使用,以避免发生转换异常.
格式:对象名 instanceof 转换类型:返回布尔值,是为true,否为false
一般用于判断一个对象是否是某个类的实例.

三.代码演示

1.抽象类

abstract class Dog{
   private String name;
   private int age;
   public Dog(){};
   public Dog(String name,int age){
       this.name=name;
       this.age=age;
   }
   public abstract void eat();
   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;
   }
}

2.两个抽象类实现

  class HasykDog extends Dog{
    public HasykDog(String name,int age){
        super(name,age);
    }
    @Override
    public void eat() {
        System.out.println("我是:"+this.getName()+" 吃饭"+" 年龄:"+this.getAge());
    }
}

class HomeDog extends Dog{
    public HomeDog(String name,int age){
        super(name,age);
    }
    @Override
    public void eat() {
        System.out.println("我是:"+this.getName()+" 吃饭"+" 年龄:"+this.getAge());
    }
    public void sleep(){
        System.out.println("我爱睡觉!");
    }
}

3.类内部定义一个静态方法

 public static void run(Dog d){
	System.out.println("跑步");
	     if (d instanceof HomeDog){
	         ((HomeDog) d).sleep();
	     }
 }

4.创建对象,实现代码

HomeDog hd=new HomeDog("佳佳",1);
Dog hk=new HasykDog("哈士奇",2);
 hd.eat();
 hd.sleep();
 run(hd);
 hk.eat();
 run(hk);

四.多态小结

1.方法的重载和重写.
2.多个子类就是父类中的多种形态.
3.父类引用可以指向子类对象,自动转换.
4.子类对象指向父类引用需要强制转换(类型不对会报异常);
5.在实际开发中尽量使用父类引用(更利于扩展);

五.小结

本章概述了java基础中面向对象的多态性,多态是面向对象编程的灵魂,掌握了多态才能算掌握面向对象的精髓,所以本章为重点;
有哪里不足或者有更好的建议,欢迎留言吐槽,有哪里不懂的小伙伴,可以私信我,我会一一答复,感谢认可,感谢支持!

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到