思想:读题拆解法,先把框架实现,在实现循环等细节等
字符串练习
用户登录案例
已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
public class Test1登录案例 { public static void main(String[] args) { //1.定义两个变量用来记录正确的用户名和密码 String rightUsername = "itheima"; String rightPassword = "1234qwer"; //2.键盘录入用户名和密码 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名"); String username = sc.next(); System.out.println("请输入密码"); String password = sc.next(); //3.判断比较 if (username.equals(rightUsername) && password.equals(rightPassword)) { System.out.println("登录成功"); } else { System.out.println("用户名或密码错误,登录失败,还剩下" + (2 - i) + "次机会"); } } }
- 根据题意,首先实现三个步骤基本框架:正确答案、键盘录入、判断比较
- 然后在进行循环和修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
public class Test1登录案例 { public static void main(String[] args) { //1.定义两个变量用来记录正确的用户名和密码 String rightUsername = "itheima"; String rightPassword = "1234qwer"; //2.键盘录入用户名和密码 //ctrl + alt + T 选择包裹方式 for (int i = 0; i < 3; i++) {//0 1 2 Scanner sc = new Scanner(System.in); System.out.println("请输入用户名"); String username = sc.next(); System.out.println("请输入密码"); String password = sc.next(); //3.判断比较 if (username.equals(rightUsername) && password.equals(rightPassword)) { System.out.println("登录成功"); //如果正确,循环结束 break; } else { //最后一次机会 if(i == 2){ System.out.println("账户" + username + "被锁定,请联系黑马程序员官方小姐姐:XXXXXXX"); }else{ //不是最后一次机会 System.out.println("用户名或密码错误,登录失败,还剩下" + (2 - i) + "次机会");//2 1 0 } } } } }
金额转换
把2135变成:零佰零拾零万贰仟壹佰叁拾伍元
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
public class StringDemo9 { public static void main(String[] args) { //1.键盘录入一个金额 Scanner sc = new Scanner(System.in); int money; //定义在循环外,不然只能在局部使用 while (true) { System.out.println("请录入一个金额"); money = sc.nextInt(); if (money >= 0 && money <= 9999999) { break; } else { System.out.println("金额无效"); } } //定义一个变量用来表示钱的大写 String moneyStr = ""; //2.得到money里面的每一位数字,再转成中文(拼接) while (true) {//2135,不知道有多少位所以用while //从右往左获取数据,因为右侧是数据的个位 int ge = money % 10; String capitalNumber = getCapitalNumber(ge); //把转换之后的大写拼接到moneyStr当中 moneyStr = capitalNumber + moneyStr; //"伍" + "" = "伍" money = money / 10; //循环结束条件:如果数字上的每一位全部获取到了,那么money记录的就是0 if (money == 0) { break; } } //3.在前面补0,补齐7位 int count = 7 - moneyStr.length(); for (int i = 0; i < count; i++) { moneyStr = "零" + moneyStr; } System.out.println(moneyStr);//零零零贰壹叁伍 //4.插入单位 //定义一个数组表示单位 String[] arr = {"佰","拾","万","仟","佰","拾","元"}; String result = ""; for (int i = 0; i < moneyStr.length(); i++) { char c = moneyStr.charAt(i); //把大写数字和单位拼接到result当中 result = result + c + arr[i]; } //5.打印最终结果 System.out.println(result); } //定义一个方法把数字变成大写的中文 public static String getCapitalNumber(int number) { //定义数组,让数字跟大写的中文产生一个对应关系 String[] arr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; //返回结果 return arr[number]; } }
手机号屏蔽
以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
public class Test8手机号屏蔽 { public static void main(String[] args) { //1.键盘录入一个手机号码 Scanner sc = new Scanner(System.in); System.out.println("请输入手机号码"); String phoneNumber = sc.next(); //13112349408 //2.截取手机号码中的前三位 String star = phoneNumber.substring(0, 3); //3.截取手机号码中的最后四位 //因为现在我要截取到最后,所以建议使用1个参数的。 String end = phoneNumber.substring(7); //4.拼接 String result = star + "****" + end; System.out.println(result); } }
罗马数字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
public class Test1Case1 { public static void main(String[] args) { /* 键盘录入一个字符串, 要求1:长度为小于等于9 要求2:只能是数字 将内容变成罗马数字 下面是阿拉伯数字跟罗马数字的对比关系: Ⅰ-1、Ⅱ-2、Ⅲ-3、Ⅳ-4、Ⅴ-5、Ⅵ-6、Ⅶ-7、Ⅷ-8、Ⅸ-9 注意点: 罗马数字里面是没有0的 如果键盘录入的数字包含0,可以变成""(长度为0的字符串)*/ //1.键盘录入一个字符串 Scanner sc = new Scanner(System.in); String str; //可以先不用管,等需要到时候在补 while (true) { System.out.println("请输入一个字符串"); str = sc.next(); //2.校验字符串是否满足规则 boolean flag = checkStr(str); if (flag) { break; } else { System.out.println("当前的字符串不符合规则,请重新输入"); continue; } } //将内容变成罗马数字 //下面是阿拉伯数字跟罗马数字的对比关系: //Ⅰ-1、Ⅱ-2、Ⅲ-3、Ⅳ-4、Ⅴ-5、Ⅵ-6、Ⅶ-7、Ⅷ-8、Ⅸ-9 StringBuilder sb = new StringBuilder(); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); //字符形式 int number = c - 48; // 1 2 3 4 5 String s = changeLuoMa(number); sb.append(s); } System.out.println(sb); } public static String changeLuoMa(int number) { //定义一个数组,让索引跟罗马数字产生一个对应关系 String[] arr = {"", "Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ"}; return arr[number]; } public static boolean checkStr(String str) {//123456 //要求1:长度为小于等于9 if (str.length() > 9) { return false; } //要求2:只能是数字 for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); //0~9 if (c < '0' || c > '9') { return false; } } //只有当字符串里面所有的字符全都判断完毕了,我才能认为当前的字符串是符合规则 return true; } }
- 注意,当有循环的时候,如果要在循环外使用变量,就把变量声明写在外面
- 字符串的底层是字符,数字也是字符形式
调整字符串
如果我们看到要修改字符串的内容,有两个办法:
1.用subString进行截取,把左边的字符截取出来拼接到右侧去
2.可以把字符串先变成一个字符数组,然后调整字符数组里面数据,最后再把字符数组变成字符串。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
public class Test2Case1 { public static void main(String[] args) { /* 给定两个字符串, A和B。 A的旋转操作就是将A 最左边的字符移动到最右边。 例如, 若A = 'abcde',在移动一次之后结果就是'bcdea' 如果在若干次调整操作之后,A能变成B,那么返回True。 如果不能匹配成功,则返回false*/ //1.定义两个字符串 String strA = "abcde"; String strB = "ABC"; //2.调用方法进行比较 boolean result = check(strA, strB); //3.输出 System.out.println(result); } public static boolean check(String strA, String strB) { for (int i = 0; i < strA.length(); i++) { strA = rotate(strA); if(strA.equals(strB)){ return true; } } //所有的情况都比较完毕了,还不一样那么直接返回false return false; } //作用:旋转字符串,把左侧的字符移动到右侧去 //形参:旋转前的字符串 //返回值:旋转后的字符串 public static String rotate(String str) { //如果我们看到要修改字符串的内容,可以有两个办法: //1.用subString进行截取,把左边的字符截取出来拼接到右侧去 //2.可以把字符串先变成一个字符数组,然后调整字符数组里面数据,最后再把字符数组变成字符串。 char first = str.charAt(0); //获取剩余的字符 String end = str.substring(1); return end + first; } }
方法二:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
public class Test2Case2 { public static void main(String[] args) { //1.定义两个字符串 String strA = "abcde"; String strB = "ABC"; //2.调用方法进行比较 boolean result = check(strA, strB); //3.输出 System.out.println(result); } public static boolean check(String strA, String strB) { for (int i = 0; i < strA.length(); i++) { strA = rotate(strA); if (strA.equals(strB)) { return true; } } //所有的情况都比较完毕了,还不一样那么直接返回false return false; } //作用:旋转字符串,把左侧的字符移动到右侧去 //可以把字符串先变成一个字符数组,然后调整字符数组里面数据,最后再把字符数组变成字符串。 public static String rotate(String str) { //"ABC" ['A','B','C'] ['B','C','A'] char[] arr = str.toCharArray(); //拿到0索引上的字符 char first = arr[0]; //把剩余的字符依次往前挪一个位置 for (int i = 1; i < arr.length; i++) { arr[i - 1] = arr[i]; } //把原来0索引上的字符放到最后一个索引 arr[arr.length - 1] = first; //利用字符数组创建一个字符串对象 String result = new String(arr); return result; } }
基础综合练习
需求分析
针对目前我们的所学内容,完成一个综合案例:学生管理系统。该系统主要功能如下:
添加学生:通过键盘录入学生信息,添加到集合中
删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
查看学生:将集合中的学生对象信息进行展示
退出系统:结束程序
实现步骤
1、定义学生类
2、学生管理系统主界面的搭建步骤
- 用输出语句完成主界面的编写 用Scanner实现键盘输入 用switch语句完成选择的功能 用循环完成功能结束后再次回到主界面
3、学生管理系统的添加学生功能实现步骤
- 定义一个方法,接收ArrayList
集合 (相当于数据库) - 方法内完成添加学生的功能 ①键盘录入学生信息 ②根据录入的信息创建学生对象 ③将学生对象添加到集合中 ④提示添加成功信息
- 在添加学生的选项里调用添加学生的方法
4、学生管理系统的查看学生功能实现步骤
- 定义一个方法,接收ArrayList
集合 - 方法内遍历集合,将学生信息进行输出
- 在查看所有学生选项里调用查看学生方法
5、学生管理系统的删除学生功能实现步骤
定义一个方法,接收ArrayList
集合 方法中接收要删除学生的学号
遍历集合,获取每个学生对象 ,使用学生对象的学号和录入的要删除的学号进行比较
在删除学生选项里调用删除学生的方法
6、学生管理系统的修改学生功能实现步骤
- 定义一个方法,接收ArrayList
集合 - 方法中接收要修改学生的学号 ,通过键盘录入学生对象所需的信息,并创建对象
- 遍历集合,获取每一个学生对象。并和录入的修改学生学号进行比较
- 在修改学生选项里调用修改学生的方法
7、退出系统
- 使用System.exit(0);退出JVM
- loop是一个标识符(也可以随便起),和break搭配使用,可以指定跳出哪个范围
System.exit(0);
是直接终止虚拟机运行
实现代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
public class StudentSystem { public static void main(String[] args) { ArrayList<Student> list = new ArrayList<>(); loop: while (true) { System.out.println("-----------------欢迎来到黑马学生管理系统-------------------"); System.out.println("1:添加学生"); System.out.println("2:删除学生"); System.out.println("3:修改学生"); System.out.println("4:查询学生"); System.out.println("5:退出"); System.out.println("请输入您的选择:"); Scanner sc = new Scanner(System.in); String choose = sc.next(); switch (choose) { //jdk12以后写法 case "1" -> addStudent(list); case "2" -> deleteStudent(list); case "3" -> updateStudent(list); case "4" -> queryStudent(list); case "5" -> { System.out.println("退出"); //break loop; System.exit(0);//停止虚拟机运行 } default -> System.out.println("没有这个选项"); } } } //添加学生 public static void addStudent(ArrayList<Student> list) { //利用空参构造先创建学生对象 Student s = new Student(); Scanner sc = new Scanner(System.in); String id = null; while (true) { System.out.println("请输入学生的id"); id = sc.next(); boolean flag = contains(list, id); if(flag){ //表示id已经存在,需要重新录入 System.out.println("id已经存在,请重新录入"); }else{ //表示id不存在,表示可以使用 s.setId(id); break; } } System.out.println("请输入学生的姓名"); String name = sc.next(); s.setName(name); System.out.println("请输入学生的年龄"); int age = sc.nextInt(); s.setAge(age); System.out.println("请输入学生的家庭住址"); String address = sc.next(); s.setAddress(address); //把学生对象添加到集合当中 list.add(s); //提示一下用户 System.out.println("学生信息添加成功"); } //删除学生 public static void deleteStudent(ArrayList<Student> list) { Scanner sc = new Scanner(System.in); System.out.println("请输入要删除的id"); String id = sc.next(); //查询id在集合中的索引 int index = getIndex(list, id); //如果-1,就表示不存在,结束方法,回到初始菜单 if(index >= 0){ //如果大于等于0的,表示存在,直接删除 list.remove(index); System.out.println("id为:" + id + "的学生删除成功"); }else{ System.out.println("id不存在,删除失败"); } } //修改学生 public static void updateStudent(ArrayList<Student> list) { Scanner sc = new Scanner(System.in); System.out.println("请输入要修改学生的id"); String id = sc.next(); int index = getIndex(list, id); if(index == -1){ System.out.println("要修改的id" + id + "不存在,请重新输入"); return; } //当代码执行到这里,表示什么?表示当前id是存在的。 //获取要修改的学生对象 Student stu = list.get(index); //输入其他的信息并修改 System.out.println("请输入要修改的学生姓名"); String newName = sc.next(); stu.setName(newName); System.out.println("请输入要修改的学生年龄"); int newAge = sc.nextInt(); stu.setAge(newAge); System.out.println("请输入要修改的学生家庭住址"); String newAddress = sc.next(); stu.setAddress(newAddress); System.out.println("学生信息修改成功"); } //查询学生 public static void queryStudent(ArrayList<Student> list) { if (list.size() == 0) { System.out.println("当前无学生信息,请添加后再查询"); //结束方法 return; } //打印表头信息 System.out.println("id\t\t姓名\t年龄\t家庭住址"); //当代码执行到这里,表示集合中是有数据的 for (int i = 0; i < list.size(); i++) { Student stu = list.get(i); System.out.println(stu.getId() + "\t" + stu.getName() + "\t" + stu.getAge() + "\t" + stu.getAddress()); } } //判断id在集合中是否存在 public static boolean contains(ArrayList<Student> list, String id) { //循环遍历集合得到里面的每一个学生对象 /*for (int i = 0; i < list.size(); i++) { //拿到学生对象后,获取id并进行判断 Student stu = list.get(i); String sid = stu.getId(); if(sid.equals(id)){ //存在,true return true; } } // 不存在false return false;*/ return getIndex(list,id) >= 0; } //通过id获取索引的方法 public static int getIndex(ArrayList<Student> list, String id){ //遍历集合 for (int i = 0; i < list.size(); i++) { //得到每一个学生对象 Student stu = list.get(i); //得到每一个学生对象的id String sid = stu.getId(); //拿着集合中的学生id跟要查询的id进行比较 if(sid.equals(id)){ //如果一样,那么就返回索引 return i; } } //当循环结束之后还没有找到,就表示不存在,返回-1. return -1; } }
进阶实现
视频-学生管理系统升级
多态综合练习
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
需求:根据需求完成代码: 1.定义狗类 属性: 年龄,颜色 行为: eat(String something)(something表示吃的东西) 看家lookHome方法(无参数) 2.定义猫类 属性: 年龄,颜色 行为: eat(String something)方法(something表示吃的东西) 逮老鼠catchMouse方法(无参数) 3.定义Person类//饲养员 属性: 姓名,年龄 行为: keepPet(Dog dog,String something)方法 功能:喂养宠物狗,something表示喂养的东西 行为: keepPet(Cat cat,String something)方法 功能:喂养宠物猫,something表示喂养的东西 生成空参有参构造,set和get方法 4.定义测试类(完成以下打印效果): keepPet(Dog dog,String somethind)方法打印内容如下: 年龄为30岁的老王养了一只黑颜色的2岁的狗 //饲养员的描述 2岁的黑颜色的狗两只前腿死死的抱住骨头猛吃 //狗吃东西的描述 keepPet(Cat cat,String somethind)方法打印内容如下: 年龄为25岁的老李养了一只灰颜色的3岁的猫 3岁的灰颜色的猫眯着眼睛侧着头吃鱼 5.思考: 1.Dog和Cat都是Animal的子类,以上案例中针对不同的动物,定义了不同的keepPet方法,过于繁琐,能否简化,并体会简化后的好处? 2.Dog和Cat虽然都是Animal的子类,但是都有其特有方法,能否想办法在keepPet中调用特有方法?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
//动物类(父类) public class Animal { private int age; private String color; public Animal() { } public Animal(int age, String color) { this.age = age; this.color = color; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public void eat(String something){ System.out.println("动物在吃" + something); } } //猫类(子类) public class Cat extends Animal { public Cat() { } public Cat(int age, String color) { super(age, color); } @Override public void eat(String something) { System.out.println(getAge() + "岁的" + getColor() + "颜色的猫眯着眼睛侧着头吃" + something); } public void catchMouse(){ System.out.println("猫抓老鼠"); } } //狗类(子类) public class Dog extends Animal { public Dog() { } public Dog(int age, String color) { super(age, color); } //行为 //eat(String something)(something表示吃的东西) //看家lookHome方法(无参数) @Override public void eat(String something) { System.out.println(getAge() + "岁的" + getColor() + "颜色的狗两只前腿死死的抱住" + something + "猛吃"); } public void lookHome(){ System.out.println("狗在看家"); } } //饲养员类 public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //饲养狗 /* public void keepPet(Dog dog, String something) { System.out.println("年龄为" + age + "岁的" + name + "养了一只" + dog.getColor() + "颜色的" + dog.getAge() + "岁的狗"); dog.eat(something); } //饲养猫 public void keepPet(Cat cat, String something) { System.out.println("年龄为" + age + "岁的" + name + "养了一只" + cat.getColor() + "颜色的" + cat.getAge() + "岁的猫"); cat.eat(something); }*/ //想要一个方法,能接收所有的动物,包括猫,包括狗 //方法的形参:可以写这些类的父类 Animal public void keepPet(Animal a, String something) { if(a instanceof Dog d){ System.out.println("年龄为" + age + "岁的" + name + "养了一只" + a.getColor() + "颜色的" + a.getAge() + "岁的狗"); d.eat(something); }else if(a instanceof Cat c){ System.out.println("年龄为" + age + "岁的" + name + "养了一只" + c.getColor() + "颜色的" + c.getAge() + "岁的猫"); c.eat(something); }else{ System.out.println("没有这种动物"); } } } //测试类 public class Test { public static void main(String[] args) { //创建饲养员的对象 Person p = new Person("老王",30); Dog d = new Dog(2,"黑"); Cat c = new Cat(3,"灰"); p.keepPet(d,"骨头"); p.keepPet(c,"鱼"); } }
接口练习
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
//因为现在我不想让外界去直接创建人的对象 //因为直接创建顶层父类人的对象此时是没有意义的 //所以我就把他写为抽象的。 public abstract class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } //子类-运动员类 public abstract class Sporter extends Person{ public Sporter() { } public Sporter(String name, int age) { super(name, age); } public abstract void study(); } //子类-教练类 public abstract class Coach extends Person{ public Coach() { } public Coach(String name, int age) { super(name, age); } public abstract void teach(); } //接口-说英语(共性行为) public interface English { public abstract void speakEnglish(); } //子类-乒乓运动员,重写所有抽象方法 public class PingPangSporter extends Sporter implements English{ public PingPangSporter() { } public PingPangSporter(String name, int age) { super(name, age); } @Override public void speakEnglish() { System.out.println("乒乓球运动员在说英语"); } @Override public void study() { System.out.println("乒乓球运动员在学习如何打乒乓球"); } } //子类-篮球运动员,重写所有抽象方法 public class BasketballSporter extends Sporter{ public BasketballSporter() { } public BasketballSporter(String name, int age) { super(name, age); } @Override public void study() { System.out.println("篮球运动员在学习如何打篮球"); } } //子类-乒乓教练,重写所有抽象方法 public class PingPangCoach extends Coach implements English{ public PingPangCoach() { } public PingPangCoach(String name, int age) { super(name, age); } @Override public void teach() { System.out.println("乒乓球教练正在教如何打乒乓球"); } @Override public void speakEnglish() { System.out.println("乒乓球教练在学习说英语"); } } //子类-篮球教练,重写所有抽象方法 public class BasketballCoach extends Coach{ public BasketballCoach() { } public BasketballCoach(String name, int age) { super(name, age); } @Override public void teach() { System.out.println("篮球教练正在教如何打篮球"); } } //测试类 public class Test { public static void main(String[] args) { //创建运动员或教练的对象 PingPangSporter pps = new PingPangSporter("刘诗雯",23); System.out.println(pps.getName() + ", " + pps.getAge()); pps.study(); pps.speakEnglish(); } }
- 千万不要忘记写构造方法