java中关于多态的一些小思考2–希望对你有帮助
java中关于多态可以说很重要了,重要的是思想,
多态可以延伸到 继承、抽象类、接口上,这三部分各有各的特点;
多态的应用场合:
1,父类作为方法的形参,传入一个子类对象,根据子类对象的不同返回不同的结果;
2,父类作为方法的返回值,可以返回具体的子类对象;
3,接口作为方法的参数,传入一个实现类对象,根据实现类对象不同来执行不同的代码块;
4,接口作为方法的返回值,返回具体的实现类对象;
思考:–继承与接口都可以实现的情况下该选择哪一种呢?
优先选择接口,因为继承是单继承的,接口可以多实现;
对于类的继承–
如果白马都继承了两个父类,那么假设父类中有两个重名方法,那么白马该选择哪一个呢?为了避免这样的问题,只能继承一个;
对于接口,因为接口中的方法为没有方法体的,而且子类必须全部实现接口中的方法,如果多个接口中有重名且参数一致的方法,(重名的方法的返回值必须一致,否则报错),那么子类只需要将该方法实现一次就可以了。
(不像抽象类,如果抽象类的子类没有全部重写其父类的抽象方法,那么子类也必须变成抽象类;—即抽象类的子类可以不必全部重写抽象类中的方法)
package com.gavin.exercise;
/**
* @author : Gavin
* @date: 2021/7/2 - 07 - 02 - 21:34
* @Description: com.gavin.exercise
* @version: 1.0
*/
abstract class Person{
abstract void add();
}
class Man extends Person{
Person per = new Man();
@Override
void add() {
}
}
interface OldNokiaTelPhone{
public void DrawPicture(Camera camera);//抽象方法照相--接口作为方法的形参,同另一个接口的返回值必须一致,类似于方法的重载,只跟参数有关,跟返回值无关
}
interface Camera{//定义一个相机接口
public void DrawPicture(Camera camera);//抽象方法照相--接口作为方法的形参
public Camera DrawVideo(Camera camera);//抽象方法录制视频--接口作为返回值
}
class Phone implements Camera,OldNokiaTelPhone{
@Override
public void DrawPicture(Camera camera) {
System.out.println("手机能照像");
}
@Override
public Camera DrawVideo(Camera camera) {
Camera com= new Computer();
return com;
}
}
class Computer implements Camera{
@Override
public void DrawPicture(Camera camera) {
System.out.println("电脑能照像");
}
@Override
public Camera DrawVideo(Camera camera) {
Camera p = new Phone();
return p;
}
}
public class Ceshi {
public static void main(String[] args) {
Camera c=new Phone();
Camera d=new Computer();
//形参为接口,传入具体的实现对象,根据参数的不同返回不同的执行结果---
c.DrawPicture(c);
d.DrawPicture(d);
}
}