看了很多文章,但是都没有怎么讲多态数组,现在我来通过简单地代码和例子来讲解一下多态数组。
1.多态数组是java中面向对象一个很重要的东西,多态数组的使用,是基于继承和接口部分的内容来实现的,能够方便我们取到不同子类中的各个参数和方法。
2.先以接口为例大家看下代码
这是一个接口 public interface Usb { void work(); }
这是一个相机类,它实现了接口,并且必须实现Usb接口中的方法 public class Camera implements Usb{ @Override public void work() { System.out.println("相机工作中"); } }
这是一个手机类,它也实现了接口,并且必须实现Usb接口中的方法,另外,他还有自己特有的方法:call() public class MyPhone implements Usb{ public void call(){ System.out.println("手机可以打电话"); } @Override public void work() { System.out.println("手机工作中"); } }
这里是一个测试类,这里的代码中体现了多态数组的灵活性和简便性 public class Test { public static void main(String[] args) { //这里不管是继承还是接口的多态数组,都是先把父类或者接口拿来创建一个数组,然后创建一个父类对象指向子类的实例, //分别放入数组中,例如数组就像父亲的房子,可以把父亲自己放进去,也可以把他的子女也放进去住,接口也是一样 Usb[] usbs= new Usb[2]; usbs[0] = new Camera(); usbs[1] = new MyPhone(); for (int i = 0; i < usbs.length; i++) { //这里想调用camera和myphone实现接口中的方法 usbs[i].work();//动态绑定 //这里本来是想调用myphone中特有的方法,所以要通过instanceof,判断一下遍历的运行类型中是否为myphone, //如果是,则调用myphone中特有的方法,举个例子:你爸想把你叫来分家产,只想把所有家产分给你,不分给其他人, //首先就得判断你是否是他要找的那个儿子,找的依据是根据你的名字来找,如果是你,则把家产分给你,就是调用这里的myphone中, //特有的call()方法 if (usbs[i] instanceof MyPhone){ ((MyPhone) usbs[i]).call(); } } } }
大家一定要仔细看我图中注释的文字,已经写得非常非常透彻了,我举了一个住房子的例子帮助大家理解什么是多态数组,另外,这里还特意补充了instanceof方法,来判断是否在数组中取到的类型是我想要的类型(MyPhone),如果是,则向下转型,调用子类中特有的方法call()方法。
大家一定一定仔细看我代码中注释的文字,对于什么是多态数组已经说得非常非常通俗易懂了,仔细看看代码和注释,大家一定会对多态数组有一个更加深刻的认知。
对于继承也是一样的,也是通过父类创建一个数组(就相当于我注释中写到的房子一样),然后通过上转型,把子类的放进去,就比如
Person[] person = new Person[5]; person[0] = new Person("爸爸",21); person[1] = new Student("张三",18,88); person[2] = new Student("李四",18,92); person[3] = new Teacher("关羽" , 22,29000); person[4] = new Teacher("赵云" , 21,31231);
代码中的Student和Teacher类都是Person类的子类,如果需要调用子类中特有的方法,还是和上面的方法一样,用instanceof来进行类型判断。
我相信仔细看完思考完应该是很清楚了,如果对于我的解答感觉有新的领悟,请宝贝们给我个点赞关注加收藏。orz
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)