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

多态Java

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

多态Java

多态:一种形式多种形态,多态其实就是接口重用。多态和继承是紧密联系的,没有继承就没有多态,而多态使得继承更有意义。

好处:

A:提高了代码的维护性(继承保证)
		B:提高了代码的扩展性(由多态保证)

缺点:不能实现子类独有的方法(可以强制类型转换方可实现)

import java.util.Scanner;

public class Test {
    //    1、定义一个接口Assaultable(可攻击的),该接口有一个抽象方法attack()。
//            2、定义一个接口Mobile(可移动的),该接口有一个抽象方法move()。
//            3、定义一个抽象类Weapon,实现Assaultable接口,但并没有给出方法的具体实现。
//            4、定义3个类:Tank,Flighter,MisslleTurret,都继承自Weapon,分别给出attack()方法的不同实现。Tank和Flighter类还实现了Mobile接口,也给出了move()方法的不同实现。
//            5、写一个类Army,代表一支军队,这个类有一个属性Weapon数组w(用来存储该军队所拥有的所有武器);该类还提供了一个构造方法,在构造方法里通过传一个int类型的参数,来限定该类所能拥有的最大武器数量,并用这一大小来初始化数组w。该类还提供了一个方法addWeapon(Weapon wa),表示把参数wa所代表的武器加入到数组w中。在这个类中还定义两个方法attackAll()让w数组中的所有武器攻击;以及moveAll()让w数组中的所有可移动的武器移动。
//            6、写一个主方法去测试以上程序。
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Army army = new Army(3);
        int j=1;
        while(j<2) {
            System.out.println("请输入接下来的指令:1、放入武器 2、进攻 3、撤退 4、退出指令");
            int i = sc.nextInt();
            switch (i) {
                case 1:
                    System.out.println("请输入要添加的武器:1、坦克 2、飞机 3、军舰");
                    Scanner s = new Scanner(System.in);
                    int n = sc.nextInt();
                    switch (n) {
                        case 1:
                            army.addWeapon(new Tank("履带式装甲战斗车辆"));
                            break;
                        case 2:
                            army.addWeapon(new Flighter("歼击机"));
                            break;
                        case 3:
                            army.addWeapon(new MisslleTurret("水面战斗舰艇"));
                            break;
                        default:
                            System.out.println("输入数字有误");
                            break;
                    }
                    break;
                case 2:
                    army.attackAll();
                    break;
                case 3:
                    army.moveAll();
                    break;
                case 4:
                    j++;
                    break;
                default:
                    System.out.println("输入错误请重新输入!");
            }
        }
        }
    }

运行主程序 ,其他子类接口父类由题中要求一步步完成即可,这里是用了switch语句嵌套,使用户输入指令获取相应的指令方法,进而完成任务,,在方法的多态中,实行的是编译看左边,运行看右边,在变量的多态中,实行编译看左边,运行看左边,左边右边,分别指代new对象具体是谁,编译器认为实例化的对象在左边,而Java虚拟机认为实例化的对象在new的后边。

编译过程中报错是语法错误,运行时报错是逻辑错误。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/853827.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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