多态
多态实现条件
Java实现多态,必须满足以下几个条件:
1.必须在继承条件下
2.子类必须要对父类中的方法进行重写/覆盖/覆写
3.通过父类的引用调用重写的方法
重写:
1.返回一样
2.方法名称一样
3.参数列表一样(个数,数据类型的排序)
重载:
1.返回值不要求
2.方法名称一样
3.参数列表不一样
向上转型和向下转型
1.向上转型:
父类引用子类对象
Animalanimal=newDog();这就很好理解,狗是动物的一种。
2.向下转型:
Dogdog=newAnimal();向下转型就可以可以用父类Animal中的方法。
但是,向下转型并不是很安全,要用关键字instanceof来判断一下能否进行向下转型。
这里讲解一下instanceof使用的方法
if(animal1instanceofDog)这里的animal1是我前面实例化出来的对象,而后面的Dog是我的一个类
向上转型,我就可以引用父类Animal的方法,并且还会显示多态的特性,比如我是cat那么我在cat中重写的方法就会体现出来,但是我就无法引用我自己类中特有的方法,如果我想用自己的有的方法就要向下转型,那么我新出来的对象不仅可以完全的运用我父类中的方法也可以运用我子类自己的方法。
静态绑定和动态绑定
静态绑定:在编译的时候能根据参数个数,类型等能确定调用哪个方法(编译时多态,静多态)
动态绑定:父类引用子类对象,通过父类引用调用在程序运行的时候,绑定到子类的方法(运行时的多态,动多态)
多态总结
多态:当父类引用在引用不同的子类对象的时候,调用同一个方法产生的效果不一样此时就叫做多态。
抽象类
特点:
1.抽象类当中可以定义和普通类一样的成员变量和成员方法。
2.抽象类当中不一定必须有抽象方法,没有抽象方法这个抽象类也可以定义。
3.抽象类不能实例化。
4.当一个普通类继承了抽象类之后,这个普通类需要重写父类抽象类当中的成员。
5.抽象类当中可以有构造方法,其作用就是为了子类当中调用被初始化父类当中的成员。
6.一个抽象类可以没有抽象方法,但是如果有一个类有抽象方法,那么这个类一定是抽象类。
7. 抽象类也可以发生动态绑定,向上转型,多态等特性。
8. 如果一个抽象类A继承了抽象类B,那么抽象类A可以补充写抽象类B中的方法,但是普通类C继承了抽象类A,此时在普通类C中不仅要重写B中的方法也要重写A中的方法。
9. 被private static final不能修饰抽象方法。(一些关键字或者是语法特性就是为了帮助我们效验)
接口
接口就是公共的行为规范,大家在实现时,只要符合规范标准,就可以通用,在Java中,接口就可以看成是多个类的公共规范,是一种引用数据类型。
特点:
1.被关键字interface修饰的。
2.接口当中的成员默认是public static final修饰的。
3.接口当中的抽象方法默认是public abstract修饰的。
4.接口当中的方法不能有具体的实现,但是,这个方法被static或者default修饰之后,可以有具体的实现。
5.接口也是不可以进行实例化的。
6.一个类可以通过关键字实现一个或多个接口。
7.当一个普通类实现该接口之后,需要重写接口当中的所有抽象方法。
8.可以发生向上转型,多态。
9.因为接口当中的方法默认是public修饰的,所以子类当中重写的权限只能是public。
这里演示一个相关接口的例子:
这里演示了一个关于电脑的接口的例子,大家可以仔细的看一下。
因为在Java中无法实现多继承,但是有了接口的存在通过关键字implements可以实现多个接口从而实现了跟多继承一样的效果。
所以我们可以有个最终的方案,就是把单独的功能放到接口当中,通过Java当中类可以实现多个接口的特性来实现多继承。
comparator的使用
这个是一个比较器,通过以上的方法可以帮我们进行年龄的大小进行排序,而且还可以定义一个数组,用Array.sort(数组名,比较器),这样里面的数据就会以我们比较器的方法来将数组中的数字进行排序。
这里补充一点,我们用什么引用去调用,谁就是this。
以上就是本次博客的内容,望各位读者友友们三连!!!