一、解题
通过这道题我们可以深入学习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{@Overridepublic 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();} }