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

Java多态(简单介绍)

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

Java多态(简单介绍)

多态是Java面向对象的一个重要特征。多态就是不同的对象对同一个事物做出的不同反应。方法重写是实现多态的基础.

1.向上转型

父类引用指向子类

向上转型的语法:

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

public class Animol {
    public void eat(){
        System.out.println("动物吃饭");
    }
}

class Dog extends Animol{
    public void eat() {
        System.out.println("狗吃骨头");//重写父类的eat
    }
    public void what(){
        System.out.println("守护院子");//狗独有的方法
    }
}

class Cat extends Animol{
    public void eat(){
        System.out.println("猫吃鱼");//重写父类的eat
    }
    public void shou(){
        System.out.println("猫捉老鼠");//猫独有的方法
    }
}
Animol animol=new Cat();(这里就是向上转型)
animol.eat();
Animol animol1=new Dog();(这里就是向上转型)
animol1.eat();

结果是调用了子类的重写的eat

猫吃鱼
狗吃骨头

我们发现无法调用子类独有的发法

子类转换为父类时的规则:

1.将一个父类的引用指向子类对象称为向转型,系统自动类型转换

2.此时通过父类引用变量调用方法时,子类覆盖或继承了父类的方法,不是父类的方法

3.此时无法通过父类的引用变量调用子类特有的方法

3.向下转型

当向上转型发生后,将无法调用子类特有的方法,但是弱国需要调用子类特有的方法,可以通过把父类转换为子类的实现

将一个指向子类对象的父类引用给一个子类引用,即父类类型转换为子类类型,称为向下转型,此时必须要强制类型转换

向下类型转换的语法:

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

这时我们可以用向下转型来调用子类独有的方法

Cat cat= (Cat) animol;(没有new)
((Cat) animol).shou();

这是结果时;猫捉老鼠

成功调用

这时我们试试Dog类

Dog dog= (Dog) animol;

我们发现没有提示报错但运行出错了

Exception in thread "main" java.lang.ClassCastException: paage1.Cat cannot be cast to paage1.Dog
	at paage1.Test.main(Animol.java:40)

我们引入一个关键字

4.instanceof运算符

在向下转型的过程中,如果不是转换为真实的子类类型,会出现异常

简单来说此时的animol已经是cat类了

instanceof就可以帮助我来判段是否是真实的子类类型。使用instanceof 时,对象类型必须和instanceof后面的参数所指定的类有继承关系,否则会出现编译错误

如下代码:

if (animol instanceof Cat){
           ((Cat) animol).shou();
       }else if (animol instanceof Dog){
           ((Dog) animol).what();
       }

结果是:猫捉老鼠

如果想调用Dog独有的方法需要:

Animol animol1=new Dog();
Dog dog= (Dog) animol1;
((Dog) animol1).what();

就是在new一个animal1

5.使用父类作为方法的形参

使用父类作为方法的参数,是java中实现和使用多态的主要方式

class Host{
    public void Leteat(Animol animol){
        animol.eat();
    }
        }
class Test2{
    public static void main(String[] args) {
      Host host=new Host();
      Animol animol;
      animol=new Dog();
      host.Leteat(animol);
      animol=new Cat();
      host.Leteat(animol);
    }

}

调用父类来控制子类

2.使用父类作为方法的返回值(了解即可)

使用父类作为方法的返回,也是java中实现和使用多态的主要方式

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017285.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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