有企业信息的网站金华建设网

当前位置: 首页 > news >正文

有企业信息的网站,金华建设网,在别人网站做的友链_为何百度检测带后缀cn/index.asp,怎么在微商城开店文章目录 Java零基础手把手保姆级教程_继承和多态#xff08;超详细#xff09;1. 继承1.1 继承的实现#xff08;掌握#xff09;1.2 继承的好处和弊端#xff08;理解#xff09; 2. 继承中的成员访问特点2.1 继承中变量的访问特点#xff08;掌握#xff09;2.2 sup… 文章目录 Java零基础手把手保姆级教程_继承和多态超详细1. 继承1.1 继承的实现掌握1.2 继承的好处和弊端理解 2. 继承中的成员访问特点2.1 继承中变量的访问特点掌握2.2 super和this关键字掌握2.3 继承中构造方法的访问特点理解2.4 继承中成员方法的访问特点掌握2.5 super内存图理解2.6 方法重写掌握2.7 方法重写的注意事项掌握2.8方法重写和重载的区别2.9. Java中继承的注意事项掌握 3. 继承练习3.1 老师和学生应用3.2 猫和狗 应用 4. 修饰符4.1 package了解4.2 import理解4.3 权限修饰符理解4.4 final应用4.5 final修饰局部变量理解4.6 static应用4.7 static访问特点掌握 5.多态5.1多态的概述记忆5.2多态中的成员访问特点记忆5.3多态的好处和弊端记忆5.4多态中的转型应用5.5多态的案例应用 6.抽象类6.1抽象类的概述理解6.2抽象类的特点记忆6.3抽象类的成员特点记忆6.4抽象类的案例应用 7.接口7.1接口的概述理解7.2接口的特点记忆7.3接口的成员特点记忆7.4接口的案例应用7.5类和接口的关系记忆7.6抽象类和接口的区别记忆 8.综合案例8.1案例需求理解8.2代码实现应用 Java零基础手把手保姆级教程_继承和多态超详细

  1. 继承 1.1 继承的实现掌握 继承的概念 继承是面向对象三大特征之一可以使得子类具有父类的属性和方法还可以在子类中重新定义以及追加属性和方法 实现继承的格式 继承通过extends实现格式class 子类 extends 父类 { } 举例class Dog extends Animal { } 继承带来的好处 继承可以让类与类之间产生关系子父类关系产生子父类后子类则可以使用父类中非私有的成员。 示例代码 public class Fu {public void show() {System.out.println(show方法被调用);} } public class Zi extends Fu {public void method() {System.out.println(method方法被调用);} } public class Demo {public static void main(String[] args) {//创建对象调用方法Fu f new Fu();f.show();Zi z new Zi();z.method();z.show();} }1.2 继承的好处和弊端理解 继承好处 提高了代码的复用性(多个类相同的成员可以放到同一个类中)提高了代码的维护性(如果方法的代码需要修改修改一处即可) 继承弊端 继承让类与类之间产生了关系类的耦合性增强了当父类发生变化时子类实现也不得不跟着变化削弱了子类的独立性 继承的应用场景 使用继承需要考虑类与类之间是否存在is…a的关系不能盲目使用继承 is…a的关系谁是谁的一种例如老师和学生是人的一种那人就是父类学生和老师就是子类
  2. 继承中的成员访问特点 2.1 继承中变量的访问特点掌握 在子类方法中访问一个变量采用的是就近原则。 子类局部范围找子类成员范围找父类成员范围找如果都没有就报错(不考虑父亲的父亲…) 示例代码 class Fu {int num 10; } class Zi {int num 20;public void show(){int num 30;System.out.println(num);} } public class Demo1 {public static void main(String[] args) {Zi z new Zi();z.show(); // 输出show方法中的局部变量30} }2.2 super和this关键字掌握 thissuper关键字 this代表本类对象的引用 super代表父类存储空间的标识(可以理解为父类对象引用) 【相同点】 都是Java中的关键字 只能在类的非静态方法中使用用来访问非静态成员方法和字段 在构造方法中调用时必须是构造方法中的第一条语句并且不能同时存在 【不同点】 this是当前对象的引用当前对象即调用实例方法的对象super相当于是子类对象中从父类继承下来部分成员的引用在非静态成员方法中this用来访问本类的方法和属性super用来访问父类继承下来的方法和属性在构造方法中this(…)用于调用本类构造方法super(…)用于调用父类构造方法两种调用不能同时在构造方法中出现构造方法中一定会存在super(…)的调用用户没有写编译器也会增加但是this(…)用户不写则没有 this和super的使用分别 成员变量 this.成员变量 - 访问本类成员变量super.成员变量 - 访问父类成员变量 成员方法 this.成员方法 - 访问本类成员方法super.成员方法 - 访问父类成员方法 构造方法 this(…) - 访问本类构造方法super(…) - 访问父类构造方法
    2.3 继承中构造方法的访问特点理解 注意子类中所有的构造方法默认都会访问父类中无参的构造方法 ​ 子类会继承父类中的数据可能还会使用父类的数据。所以子类初始化之前一定要先完成父类数据的初始化原因在于每一个子类构造方法的第一条语句默认都是super() 问题如果父类中没有无参构造方法只有带参构造方法该怎么办呢
  3. 通过使用super关键字去显示的调用父类的带参构造方法
  4. 在父类中自己提供一个无参构造方法推荐方案 ​ 自己给出无参构造方法 2.4 继承中成员方法的访问特点掌握 通过子类对象访问一个方法 子类成员范围找父类成员范围找如果都没有就报错(不考虑父亲的父亲…) 2.5 super内存图理解 对象在堆内存中会单独存在一块super区域用来存放父类的数据
    2.6 方法重写掌握 1、方法重写概念 子类出现了和父类中一模一样的方法声明方法名一样参数列表也必须一样 2、方法重写的应用场景 当子类需要父类的功能而功能主体子类有自己特有内容时可以重写父类中的方法这样即沿袭了父类的功能又定义了子类特有的内容 3、Override注解 用来检测当前的方法是否是重写的方法起到【校验】的作用
    2.7 方法重写的注意事项掌握 方法重写的注意事项 私有方法不能被重写(父类私有成员子类是不能继承的)子类方法访问权限不能更低(public 默认 私有) 示例代码 public class Fu {private void show() {System.out.println(Fu中show()方法被调用);}void method() {System.out.println(Fu中method()方法被调用);} }public class Zi extends Fu {/* 编译【出错】子类不能重写父类私有的方法/Overrideprivate void show() {System.out.println(Zi中show()方法被调用);}/ 编译【出错】子类重写父类方法的时候访问权限需要大于等于父类 /Overrideprivate void method() {System.out.println(Zi中method()方法被调用);}/ 编译【通过】子类重写父类方法的时候访问权限需要大于等于父类 */Overridepublic void method() {System.out.println(Zi中method()方法被调用);} }2.8方法重写和重载的区别 方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载 (Overloading)。方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写 (Overriding)。方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。 方法重载的要求是参数列表不同。具体包括以下三种情形。 ①参数的数量不同。 ②参数的类型不同。 ③参数的顺序不同。 2.9. Java中继承的注意事项掌握 Java中继承的注意事项 Java中类只支持单继承不支持多继承后续学习的接口支持多继承 可以将java中的继承看作是亲父亲接口看作是义父亲父亲只能有一个义父可以有多个来进行理解 错误范例class A extends B, C { } Java中类支持多层继承 多层继承示例代码 public class Granddad {public void drink() {System.out.println(爷爷爱喝酒);}}public class Father extends Granddad {public void smoke() {System.out.println(爸爸爱抽烟);}}public class Mother {public void dance() {System.out.println(妈妈爱跳舞);}} public class Son extends Father {// 此时Son类中就同时拥有drink方法以及smoke方法 }3. 继承练习 3.1 老师和学生应用 需求定义老师类和学生类然后写代码测试最后找到老师类和学生类当中的共性内容抽取出一个父类用继承的方式改写代码并进行测试 步骤 ①定义老师类(姓名年龄教书()) ②定义学生类(姓名年龄学习()) ③定义测试类写代码测试 ④共性抽取父类定义人类(姓名年龄) ⑤定义老师类继承人类并给出自己特有方法教书() ⑥定义学生类继承人类并给出自己特有方法学习() ⑦定义测试类写代码测试 示例代码 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;} }class Teacher extends Person {public Teacher() {}public Teacher(String name,int age) {super(name,age);}public void teach() {System.out.println(用爱成就每一位学员);}}class Student extends Person{public Student() {}public Student(String name, int age) {super(name,age);}public void study(){System.out.println(学生学习);}}class PersonDemo {public static void main(String[] args){//创建老师类对象并进行测试Teacher t1 new Teacher();t1.setName(林青霞);t1.setAge(30);System.out.println(t1.getName() , t1.getAge());t1.teach();Teacher t2 new Teacher(风清扬, 33);System.out.println(t2.getName() , t2.getAge());t2.teach();// 创建学生类对象测试Student s new Student(张三23)System.out.println(s.getName() , s.getAge());s.study();} }3.2 猫和狗 应用 需求请采用继承的思想实现猫和狗的案例并在测试类中进行测试 分析 ①猫 ​ 成员变量姓名年龄 ​ 构造方法无参带参 ​ 成员方法get/set方法抓老鼠() ②狗 ​ 成员变量姓名年龄 ​ 构造方法无参带参 ​ 成员方法get/set方法看门() ③共性 ​ 成员变量姓名年龄构造方法无参带参成员方法get/set方法 步骤 1、定义动物类(Animal) ​ 【成员变量姓名年龄】【 构造方法无参带参】【成员方法get/set方法】 2、定义猫类(Cat)继承动物类 ​ 【构造方法无参带参】【成员方法抓老鼠() 】 3、定义狗类(Dog)继承动物类 ​ 【构造方法无参带参】【成员方法看门() 】 4、定义测试类(AnimalDemo)写代码测试 示例代码 class Animal {private String name;private int age;public Animal() {}public Animal(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;} } class Cat extends Animal {public Cat() {}public Cat(String name, int age) {super(name, age);}public void catchMouse() {System.out.println(猫抓老鼠);} } class Dog extends Animal {public Dog() {}public Dog(String name, int age) {super(name, age);}public void lookDoor() {System.out.println(狗看门);} } /测试类/ public class AnimalDemo {public static void main(String[] args) {//创建猫类对象并进行测试Cat c1 new Cat();c1.setName(加菲猫);c1.setAge(5);System.out.println(c1.getName() , c1.getAge());c1.catchMouse();Cat c2 new Cat(加菲猫, 5);System.out.println(c2.getName() , c2.getAge());c2.catchMouse();} }4. 修饰符 4.1 package了解 1、包的概念 包就是文件夹用来管理类文件的 2、包的定义格式 package 包名; (多级包用.分开)例如package com.heima.demo; 3、带包编译带包运行 带包编译javac –d . 类名.java 例如javac -d . com.heima.demo.HelloWorld.java 带包运行java 包名类名 例如java com.heima.demo.HelloWorld
    4.2 import理解 导包的意义 使用不同包下的类时使用的时候要写类的全路径写起来太麻烦了 为了简化带包的操作Java就提供了导包的功能 导包的格式 格式import 包名; 范例import java.util.Scanner; 示例代码没有使用导包创建的Scanner对象
    package com.heima;public class Demo {public static void main(String[] args) {// 1. 没有导包创建Scnaner对象java.util.Scanner sc new java.util.Scanner(System.in);} }示例代码使用导包后创建的Scanner对象 package com.heima;import java.util.Scanner;public class Demo {public static void main(String[] args) {// 1. 没有导包创建Scnaner对象Scanner sc new Scanner(System.in);} }4.3 权限修饰符理解 4.4 final应用 fianl关键字的作用 final代表最终的意思可以修饰成员方法成员变量类 final修饰类、方法、变量的效果 fianl修饰类该类不能被继承不能有子类但是可以有父类final修饰方法该方法不能被重写final修饰变量表明该变量是一个常量不能再次赋值
    4.5 final修饰局部变量理解 fianl修饰基本数据类型变量 final 修饰指的是基本类型的数据值不能发生改变 final修饰引用数据类型变量 final 修饰指的是引用类型的地址值不能发生改变但是地址里面的内容是可以发生改变的 举例 public static void main(String[] args){final Student s new Student(23);s new Student(24); // 错误s.setAge(24); // 正确 }4.6 static应用 static的概念 static关键字是静态的意思可以修饰【成员方法】【成员变量】 static修饰的特点 被类的所有对象共享这也是我们判断是否使用静态关键字的条件可以通过类名调用当然也可以通过对象名调用【推荐使用类名调用】 示例代码 class Student {public String name; //姓名public int age; //年龄public static String university; //学校 共享数据所以设计为静态public void show() {System.out.println(name , age , university);}}public class StaticDemo {public static void main(String[] args) {// 为对象的共享数据赋值Student.university 传智大学;Student s1 new Student();s1.name 林青霞;s1.age 30;s1.show();Student s2 new Student();s2.name 风清扬;s2.age 33;s2.show();} }4.7 static访问特点掌握 static的访问特点 非静态的成员方法 能访问静态的成员变量能访问非静态的成员变量能访问静态的成员方法能访问非静态的成员方法 静态的成员方法 能访问静态的成员变量能访问静态的成员方法 总结成一句话就是 静态成员方法只能访问静态成员
    5.多态 5.1多态的概述记忆 什么是多态 ​ 同一个对象在不同时刻表现出来的不同形态 多态的前提3个 要有继承或实现关系要有方法的重写要有父类引用指向子类对象
    5.2多态中的成员访问特点记忆 成员访问特点 成员变量 ​ 编译看父类运行看父类 成员方法 ​ 编译看父类运行看子类 代码演示 动物类 public class Animal {public int age 40;public void eat() {System.out.println(动物吃东西);} }猫类 public class Cat extends Animal {public int age 20;public int weight 10;Overridepublic void eat() {System.out.println(猫吃鱼);}public void playGame() {System.out.println(猫捉迷藏);} }测试类 public class AnimalDemo {public static void main(String[] args) {//有父类引用指向子类对象Animal a new Cat();System.out.println(a.age); // System.out.println(a.weight);a.eat(); // a.playGame();} }5.3多态的好处和弊端记忆 好处 ​ 提高程序的扩展性。定义方法时候使用父类型作为参数在使用的时候使用具体的子类型参与操作 弊端 ​ 不能使用子类的特有成员
    5.4多态中的转型应用 向上转型 ​ 父类引用指向子类对象就是向上转型 向上转型的优点让代码实现更简单灵活。 向上转型的缺陷不能调用到子类特有的方法。 向下转型 ​ 格式子类型 对象名 (子类型)父类引用; 向下转型用的比较少而且不安全万一转换失败运行时就会抛异常。Java中为了提高向下转型的安全性引入了 instanceof 如果该表达式为true则可以安全转换。 代码演示 动物类 public class Animal {public void eat() {System.out.println(动物吃东西);} }猫类 public class Cat extends Animal {Overridepublic void eat() {System.out.println(猫吃鱼);}public void playGame() {System.out.println(猫捉迷藏);} }测试类 public class AnimalDemo {public static void main(String[] args) {//多态//向上转型Animal a new Cat();a.eat(); // a.playGame();//向下转型Cat c (Cat)a;c.eat();c.playGame();} }5.5多态的案例应用 案例需求 ​ 请采用多态的思想实现猫和狗的案例并在测试类中进行测试 代码实现 动物类 public class Animal {private String name;private int age;public Animal() {}public Animal(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 eat() {System.out.println(动物吃东西);} }猫类 public class Cat extends Animal {public Cat() {}public Cat(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(猫吃鱼);} }狗类 public class Dog extends Animal {public Dog() {}public Dog(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(狗吃骨头);} }测试类 public class AnimalDemo {public static void main(String[] args) {//创建猫类对象进行测试Animal a new Cat();a.setName(加菲);a.setAge(5);System.out.println(a.getName() , a.getAge());a.eat();a new Cat(加菲, 5);System.out.println(a.getName() , a.getAge());a.eat();} }6.抽象类 6.1抽象类的概述理解 ​ 当我们在做子类共性功能抽取时有些方法在父类中并没有具体的体现这个时候就需要抽象类了 ​ 在Java中一个没有方法体的方法应该定义为抽象方法而类中如果有抽象方法该类必须定义为抽象类 6.2抽象类的特点记忆 抽象类和抽象方法必须使用 abstract 关键字修饰 //抽象类的定义 public abstract class 类名 {}//抽象方法的定义 public abstract void eat();抽象类中不一定有抽象方法有抽象方法的类一定是抽象类 抽象类不能实例化 ​ 抽象类如何实例化呢参照多态的方式通过子类对象实例化这叫抽象类多态 抽象类的子类 ​ 要么重写抽象类中的所有抽象方法 ​ 要么是抽象类
    6.3抽象类的成员特点记忆 成员的特点 成员变量 既可以是变量也可以是常量 构造方法 空参构造有参构造 成员方法 抽象方法普通方法 代码演示 动物类 public abstract class Animal {private int age 20;private final String city 北京;public Animal() {}public Animal(int age) {this.age age;}public void show() {age 40;System.out.println(age); // city 上海;System.out.println(city);}public abstract void eat();}猫类 public class Cat extends Animal {Overridepublic void eat() {System.out.println(猫吃鱼);} }测试类 public class AnimalDemo {public static void main(String[] args) {Animal a new Cat();a.eat();a.show();} }6.4抽象类的案例应用 案例需求 ​ 请采用抽象类的思想实现猫和狗的案例并在测试类中进行测试 代码实现 动物类 public abstract class Animal {private String name;private int age;public Animal() {}public Animal(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 void eat(); }猫类 public class Cat extends Animal {public Cat() {}public Cat(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(猫吃鱼);} }狗类 public class Dog extends Animal {public Dog() {}public Dog(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(狗吃骨头);} }测试类 public class AnimalDemo {public static void main(String[] args) {//创建对象按照多态的方式Animal a new Cat();a.setName(加菲);a.setAge(5);System.out.println(a.getName(),a.getAge());a.eat();System.out.println(——–);a new Cat(加菲,5);System.out.println(a.getName(),a.getAge());a.eat();} }7.接口 7.1接口的概述理解 ​ 接口就是一种公共的规范标准只要符合规范标准大家都可以通用。 ​ Java中的接口更多的体现在对行为的抽象 7.2接口的特点记忆 接口用关键字interface修饰 public interface 接口名 {} 类实现接口用implements表示 public class 类名 implements 接口名 {}接口不能实例化 ​ 接口如何实例化呢参照多态的方式通过实现类对象实例化这叫接口多态。 ​ 多态的形式具体类多态抽象类多态接口多态。 接口的子类 ​ 要么重写接口中的所有抽象方法 ​ 要么子类也是抽象类
    7.3接口的成员特点记忆 成员特点 成员变量 ​ 只能是常量 ​ 默认修饰符public static final 构造方法 ​ 没有因为接口主要是扩展功能的而没有具体存在 成员方法 ​ 只能是抽象方法 ​ 默认修饰符public abstract ​ 关于接口中的方法JDK8和JDK9中有一些新特性后面再讲解 代码演示 接口 public interface Inter {public int num 10;public final int num2 20; // public static final int num3 30;int num3 30;// public Inter() {}// public void show() {}public abstract void method();void show(); }实现类 public class InterImpl extends Object implements Inter {public InterImpl() {super();}Overridepublic void method() {System.out.println(method);}Overridepublic void show() {System.out.println(show);} }测试类 public class InterfaceDemo {public static void main(String[] args) {Inter i new InterImpl(); // i.num 20;System.out.println(i.num); // i.num2 40;System.out.println(i.num2);System.out.println(Inter.num);} }7.4接口的案例应用 案例需求 ​ 对猫和狗进行训练他们就可以跳高了这里加入跳高功能。 ​ 请采用抽象类和接口来实现猫狗案例并在测试类中进行测试。 代码实现 动物类 public abstract class Animal {private String name;private int age;public Animal() {}public Animal(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 void eat(); }跳高接口 public interface Jumpping {public abstract void jump(); }猫类 public class Cat extends Animal implements Jumpping {public Cat() {}public Cat(String name, int age) {super(name, age);}Overridepublic void eat() {System.out.println(猫吃鱼);}Overridepublic void jump() {System.out.println(猫可以跳高了);} }测试类 public class AnimalDemo {public static void main(String[] args) {//创建对象调用方法Jumpping j new Cat();j.jump();System.out.println(——–);Animal a new Cat();a.setName(加菲);a.setAge(5);System.out.println(a.getName(),a.getAge());a.eat(); // a.jump();a new Cat(加菲,5);System.out.println(a.getName(),a.getAge());a.eat();System.out.println(——–);Cat c new Cat();c.setName(加菲);c.setAge(5);System.out.println(c.getName(),c.getAge());c.eat();c.jump();} }7.5类和接口的关系记忆 类与类的关系 ​ 继承关系只能单继承但是可以多层继承 类与接口的关系 ​ 实现关系可以单实现也可以多实现还可以在继承一个类的同时实现多个接口 接口与接口的关系 ​ 继承关系可以单继承也可以多继承
    7.6抽象类和接口的区别记忆 成员区别 抽象类 ​ 变量,常量有构造方法有抽象方法,也有非抽象方法 接口 ​ 常量抽象方法 关系区别 类与类 ​ 继承单继承 类与接口 ​ 实现可以单实现也可以多实现 接口与接口 ​ 继承单继承多继承 设计理念区别 抽象类 ​ 对类抽象包括属性、行为 接口 ​ 对行为抽象主要是行为
    8.综合案例 8.1案例需求理解 ​ 我们现在有乒乓球运动员和篮球运动员乒乓球教练和篮球教练。 ​ 为了出国交流跟乒乓球相关的人员都需要学习英语。 ​ 请用所学知识分析这个案例中有哪些具体类哪些抽象类哪些接口并用代码实现。 8.2代码实现应用 抽象人类 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 void eat(); }抽象运动员类 public abstract class Player extends Person {public Player() {}public Player(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 SpeakEnglish {public abstract void speak(); }蓝球教练 public class BasketballCoach extends Coach {public BasketballCoach() {}public BasketballCoach(String name, int age) {super(name, age);}Overridepublic void teach() {System.out.println(篮球教练教如何运球和投篮);}Overridepublic void eat() {System.out.println(篮球教练吃羊肉喝羊奶);} }乒乓球教练 public class PingPangCoach extends Coach implements SpeakEnglish {public PingPangCoach() {}public PingPangCoach(String name, int age) {super(name, age);}Overridepublic void teach() {System.out.println(乒乓球教练教如何发球和接球);}Overridepublic void eat() {System.out.println(乒乓球教练吃小白菜喝大米粥);}Overridepublic void speak() {System.out.println(乒乓球教练说英语);} }乒乓球运动员 public class PingPangPlayer extends Player implements SpeakEnglish {public PingPangPlayer() {}public PingPangPlayer(String name, int age) {super(name, age);}Overridepublic void study() {System.out.println(乒乓球运动员学习如何发球和接球);}Overridepublic void eat() {System.out.println(乒乓球运动员吃大白菜喝小米粥);}Overridepublic void speak() {System.out.println(乒乓球运动员说英语);} }篮球运动员 public class BasketballPlayer extends Player {public BasketballPlayer() {}public BasketballPlayer(String name, int age) {super(name, age);}Overridepublic void study() {System.out.println(篮球运动员学习如何运球和投篮);}Overridepublic void eat() {System.out.println(篮球运动员吃牛肉喝牛奶);} }关注博主获取更多编程知识。