Java基础编程练习第32题-定义接口(Biology、Animal)、类(Person)、子类(Pupil)(PTA选题)
一、解题
通过这道题我们可以深入学习Java语言的继承,接口的定义。
题目:
分析:
此题其实和前面我们28,29题没有相差很大,只不过在类的基础上我们需要学习接口的定义,以及继承是如何实现的。我们直接对照代码逐句分析:
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); Pupil zhangsan = new Pupil(); String schoolName = scanner.nextLine(); zhangsan.setSchool(schoolName); // 输出学校信息 System.out.println("我的学校是" + zhangsan.getSchool()); // 调用方法,直接调用 zhangsan.breathe(); zhangsan.eat(); zhangsan.sleep(); zhangsan.think(); } } //定义Biology接口 interface Biology{ void breathe(); } //定义Animal接口 interface Animal{ void eat(); void sleep(); } //定义Person类实现Biology和Animal接口 class Person implements Biology,Animal{ @Override public void breathe() { System.out.println("我喜欢呼吸新鲜空气"); } public void eat() { System.out.println("我会按时吃饭"); } public void sleep() { System.out.println("早睡早起身体好"); } //这个是Person类自己的方法 public void think() { System.out.println("我喜欢思考"); } } //定义子类Pupil类继承Person类 //根据题意定义Person类 class Pupil extends Person{ private String school; public void setSchool(String school){ this.school = school; } public String getSchool() { return school; } }
二、接口
接口的定义
在Java中,接口(Interface)是一种引用类型,类似于类,用于存放抽象方法和静态变量。接口定义了一个规范,规范实现接口的类应具备哪些方法。
接口的特点
1.接口中只能定义抽象方法和静态常量。抽象方法是没有方法体的方法,静态常量是不可变的变量。
例如:
public interface Animal { void eat(); void sound(); }
这里eat();sound();都没有具体实现,没有方法体。
抽象方法:没有实现体的方法,既它没有花括号和方法体,只有方法签名和一个分号
例如:
// 抽象方法 void makeSound(); // 非抽象方法 void sleep() { System.out.println("Animal is sleeping"); }
2.接口不能被实例化,但可以被实现(implements关键字)或者继承(extends关键字)。
3.一个类可以实现多个接口。
接口的使用
定义接口的基本语法:
[修饰符] interface 接口名称 { // 抽象方法 [返回类型] 方法名称([参数列表]); // 静态常量 [修饰符] 类型 常量名称 = 常量值; // Java 8+ 默认方法 default [返回类型] 方法名称([参数列表]) { // 方法体 } // Java 8+ 静态方法 static [返回类型] 方法名称([参数列表]) { // 方法体 } }
一个类通过implements关键字实现接口,并必须实现接口中所有的抽象方法。
public class Dog implements Animal { public void eat() { System.out.println("Dog eats."); } public void sound() { System.out.println("Dog barks."); } }
在这个例子中,Dog类实现了Animal接口,并提供了eat和sound方法的具体实现。
三、继承
在面向对象学习中已经学习过继承了,这里不过多介绍了。
在Java中定义继承的基本语法;
class 父类 { // 父类的字段和方法 } class 子类 extends 父类 { // 子类新增的字段和方法 // 可以选择覆盖父类的方法 }
在这个语法中,extends关键字用于指定子类要继承的父类。
举个例子:
// 定义一个父类 class Vehicle { // 父类的字段 protected String brand = "Ford"; // Vehicle 的品牌 // 父类的方法 public void honk() { System.out.println("Tuut, tuut!"); } } // 定义一个子类,继承自 Vehicle class Car extends Vehicle { // 子类新增的字段 private String modelName = "Mustang"; // Car 的模型名称 // 子类的方法 public void displayInformation() { System.out.println("Model: " + modelName + "; Brand: " + brand); } } // 主类 public class Main { public static void main(String[] args) { // 创建 Car 类的实例 Car myCar = new Car(); // 调用继承自父类的方法 myCar.honk(); // 调用子类自己的方法 myCar.displayInformation(); } }