JAVA多态

1.为什么要使用多态

  • 同一个对象拥有多种形态

  • 作用:把不同的数据类型进行统一


##2.实现多态

实现多态需要三个必要条件

  • 一、要有继承关系的父类和子类;

  • 二、要有子类重写父类方法;

  • 三、父类的引用指向子类的对象。

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

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

  • 系统会自动进行类型转换

  • 通过父类引用变量调用的方法是子类覆盖或继承的子类方法,不是父类的方法。

  • 通过父类引用变量无法带哦用子类特有的方法

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


//子类向父类转换被称为向上转换
Aoology aoology2=new DaXiang();
//父类转向子类被称为向下转换 需要强制转换
Cat cat=(Cat) aoology2;

先创建一个父类 Aoology 动物类 里边有一个吃的方法


public class Aoology {
    public void eat(){

    }
}

创建一个人类 Person 里边写人要做什么事情 人要喂动物 把动物类对象作为参数


public class Person {
    public void Wei(Aoology aoology)
    {
        aoology.eat();
    }
}

在创建一个子类 Cat 猫类 继承了 Aoology 动物类 在子类里重写父类的eat方法


public class Cat extends Aoology{
    public void eat()
    {
        System.out.println("猫在咬狗");
    }
}

在 Main 方法里 创建父类对象 将父类的引用指向子类对象 然后创建 人类对象 调用方法 把父类指向子类对象的引用 放到参数里


public class Main {

    public static void main(String[] args) {
        Aoology aoology=new Cat();

        Person person=new Person();
        person.Wei(aoology);
    }
}
  • 将一个父类的引用指向子类对象被称为向上转换,系统会自动进行类型转换

  • 通过父类引用变量调用的方法是子类重写或继承的子类方法,不是父类的方法

  • 通过父类引用变量无法调用子类特有的方法

把子类的对象赋值给父类 -->向上转型

缺点

  • 向上转型会自动屏蔽掉 子类中特有的方法

  • 向上转型只能父类调用子类中重写过父类的方法,无法调用子类中特有的方法。

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

语法

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

  • 向上转型 父类无法调用子类里的特有的方法

  • 向下转型 可以使用子类里特有的方法


public class Main {

    public static void main(String[] args) {
        Aoology aoology=new Cat();
      
        Cat cat=(Cat)aoology;
        cat.asdas();

    }
}

先创建一个父类 Aoology 动物类 里边有一个吃的方法


public class Aoology {
    public void eat(){

    }
}

创建一个人类 Person 里边写人要做什么事情 人要喂动物 把动物类对象作为参数


public class Person {
    public void Wei(Aoology aoology)
    {
        aoology.eat();
    }
}

在创建一个子类 Cat 猫类 继承了 Aoology 动物类 在子类里重写父类的eat方法


public class Cat extends Aoology{
    public void eat()
    {
        System.out.println("猫在咬狗");
    }
}

在 Main 方法里 创建父类对象 将父类的引用指向子类对象 然后创建 人类对象 调用方法 把父类指向子类对象的引用 放到参数里


public class Main {

    public static void main(String[] args) {
        Aoology aoology=new Cat();

        Person person=new Person();
        person.Wei(aoology);
    }
}

3.instanceof运算符

instanceof 运算符一般作用于向下转型 进行强制转换的时候使用


public class Main {

    public static void main(String[] args) {
        Aoology aoology=new Cat();
      
        //判断 类的引用变量是否属于一个类
        if(aoology instanceof Cat)
        {
            ((Cat)aoology).asdas();
        }

在强制类型转换之前通过 instanceof 运算符检查对象的真实类型,在进行相应的强制类型转换,这样避免类型转换一场,从而提高代码的健壮性。

##4.多态的优势

  • 可替换性:多态对已存在的代码具有可替换性。

  • 可扩充性:多态多对吗具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。

  • 灵活性:在多态的应用中,体现了领过多样的操作,提高了使用效率。

  • 简化性:简化了代码的编写和修改过程,提高了代码的可读性

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值