JAVA基础 - 多态

目录

什么是多态

重载和重写

重写

重载 

多态的分类

多态的条件

向上转型&向下转型

向上转型:

向下转型:


什么是多态

多态可以理解为多种形态,同一件事情,不同的对象去完成时会产生出不同的状态,也就产生不同的结果

重载和重写

重写

重写(override):子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写

重写可以让子类定义自己的行为,也可以用于实现父类的方法

-》重写的规则:

1、重写的方法的方法名相同,传入参数均相同

2、被重写的方法返回值类型可以不同,但是必须是具有父子关系

3、访问权限不能比父类中被重写的方法的访问权限更低。比如父类方法被public修饰,则子类中重写该方法就不能声明为 protected

4、父类被static、private修饰的方法、构造方法都不能被重写

重载 

重载发生在一个类中

重载的特性:方法名相同,返回类型相同,传入方法的参数不同(包括个数和类型)

多态的分类

多态一般分为两种:重写式多态和重载式多态

重载式多态,也叫编译时多态

这种多态在编译时已经确定,方法名相同而参数列表不同的一组方法就是重载。在调用这种重载的方法时,通过传入不同的参数而得到不同的结果。

重写式多态,也叫运行时多态

这种多态通过动态绑定技术来实现,在程序运行期间判断所引用对象的实际类型,根据实际的类型调用其相应的方法。也就是程序运行起来才知道调用的是哪个子类的方法

多态的条件

Java实现多态有三个必要条件:继承、重写、父类引用指向子类对象

继承: 存在继承体系下,涉及到父类和子类

重写:子类必须要对父类方法进行重写

父类引用指向子类对象:通过父类的引用调用子类中的重写方法

 

向上转型&向下转型

向上转型:

创建一个子类对象,将其当成父类对象来使用

父类类型 对象名 = new 子类类型()

多态本身是子类向父类向上转换(自动转换)的过程,这个过程是默许,无需强制转换

例如:animal是父类类型,但可以引用一个子类对象,因为是从小范围向大范围的转换

Animal animal1=new Dog();

//Animal是引用类型,new Dog()一个实例对象,即左侧的引用指向了子类的对象

//相当于Animal animal1=(Animal)new Dog();

 缺点:将一个子类对象经过向上转型之后当成父类方法使用,就无法再调用子类特有的方法

向下转型:

向下转型是父类向子类转换的过程,这个过程需要强制转换

子类类型 子类变量名 = (子类类型) 父类变量名

父类可能存在多个子类,要转换成子类,就需要指定具体要变成哪个子类,必须有指向性,因此向下转型需要强制转换(指定子类类型)

Animal animal1=new Animal (); //创建一个父类对象

Dog dog1 = (Dog) animal1; //将父类对象强制转换成子类类型

//此时父类对象可以调用子类特有的方法

注:向下转型的缺陷:

假设Animal有两个子类Cat类和Dog类

向上转型的过程:Animal animal= new Cat(); //将父类引用指向了Cat子类实例

向下转型的过程: Dog dog1 = (Dog) animal; //此操作将父类对象animal强制转换为Dog类型

调用Dog类特有方法:dog1.walk()  //此步会出现编译报错,报异常ClassCastException,Cat对象最后却变成Dog对象,这肯定是不正确的

可以使用instanceof来解决此问题,用于判断变量是否属于该数据类型或者其子类型

 if ( animal instanceof Cat){

            Cat cat = (Cat) animal;

            cat.sleep();

        }else if(animal instanceof Dog){

            Dog dog = (Dog) animal;

            dog.walk();

        }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值