[Java] 接口的相关题目


接口的相关题目

1. 关键字 static

1. 请问 static 关键字可以修饰哪些元素?它们分别代表什么意义?
	
	static 关键字可以修饰成员变量、成员方法及代码块,被 static 修饰的成员是类成员。

2. 请问 static 修饰的成员变量在内存中有什么特点?

	被 static 修饰的成员随着类的加载而加载,静态成员变量被该类的所有对象共享。

3. 请问被 static 修饰的成员可以怎样调用它们?

	静态成员可以使用类名访问,也可以使用对象访问,一般建议使用类名直接访问。

2. 关键字 final

1. 请写出 final 可以修饰的元素,并写出修饰后的含义。

  修饰类:被 final 修饰的类,不能被其他类继承;
  修饰变量:被 final 修饰的变量不能被重新赋值(引用类型的变量不能改变地址值);
  修饰方法:被 final 修饰发方法,不能被子类重写。

3. 问答题

1. 请问子类实现接口使用什么关键字?

	实现接口使用 implements

2. 请问子类实现接口后有什么要求?

	子类实现接口后,需要重写接口中所有的抽象方法。
  	
  	1. 多实现时父接口中有如下情况:
		同名的抽象方法,仅需重写一次
		同名的默认方法,必须重写
		同名的静态方法,无需重写
  
	2. 继承一个类,同时实现了一个或多个接口时出现如下情况:
		父类中的方法和父接口中的抽象方法同名,就近原则

3. 请问子类是否可以同时实现多个接口?

	可以

4. 请问子类是否可以在继承一个类的同时实现多个接口?

	可以

5. 请问接口是否可以继承一个或多个接口?

	可以

4. 编程题 1

  1. 请定义“员工(类)”:
    • 属性:姓名、性别、年龄(全部私有)
    • 行为:工作(抽象)
    • 无参、全参构造方法
    • get/set 方法
  2. 请定义“绘画(接口)”:
    • 抽象方法:绘画
  3. 请定义“Java员工类”继承自“员工类”。
  4. 请定义”UI员工类”,继承自“员工类”,并实现“绘画”接口。
  5. 请按上述要求设计出类结构,并实现相关的方法,并进行调用测试。

参考答案:

  • 员工类
/**
 * 员工
 */
public abstract class Employee {

    //成员变量
    private String name; //姓名
    private String gender; //性别
    private String age; //年龄

    //空参构造
    public Employee() {
    }

    //全参构造
    public Employee(String name, String gender, String age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
    }

    //成员方法
    public abstract void work();

    //getter & setter 略
    
}
  • 绘画接口
/**
 * 绘画
 */
public interface Paint {

    void paint();
}
  • Java 员工类
/**
 * Java 员工 继承 员工类
 */
public class JavaEmployee extends Employee {

    @Override
    public void work() {
        System.out.println("Java 员工正在工作...");
    }
}
  • UI 员工类
/**
 * UI员工 继承 员工类 实现 绘画接口
 */
public class UIEmployee extends Employee implements Paint {

    @Override
    public void work() {
        System.out.println("UI 员工正在工作...");
    }

    @Override
    public void paint() {
        System.out.println("UI 员工正在绘画...");
    }
}

5. 编程题 2

  1. 一个机动车管理系统中有以下类的设计:
    • 机动车类:
      • 汽车类:
      • 奔驰车
      • 宝马车
    • 摩托车类:
      • 雅马哈摩托
      • 宝马摩托
  2. 所有的车都有如下信息:
    • 属性:品牌、价格
    • 行为:运行
  3. 现在要求为所有“宝马车系”的汽车增加一个 GPS 功能。
  4. 请设计出上述的类结构,并用代码实现。

参考答案:

  • 机动车
**
 * 机动车
 */
public class MotorVehicle {

    private String brand; //品牌

    private String type; //类型

    private int maxSpeed; //最大速度

    //行驶
    public void run() {
        System.out.println(brand + type + "以每小时" + maxSpeed + "公里的速度在狂奔...");
    }

    //空参构造
    public MotorVehicle() { }

    //全参构造
    public MotorVehicle(String brand, String type, int maxSpeed) {
        this.brand = brand;
        this.type = type;
        this.maxSpeed = maxSpeed;
    }

    //getter & setter 略
}
  • GPS
/**
 * GPS
 */
public interface GPS {

    //定位
    void positioning();
}
  • 汽车
/**
 * 汽车类 继承 机动车类
 */
public class Car extends MotorVehicle {

    //空参构造
    public Car() { }

    //全参构造
    public Car(String brand, int maxSpeed) {
        super(brand, "汽车", maxSpeed);  //确定类型为汽车
    }
}
  • 奔驰汽车
/**
 * 奔驰汽车 继承 汽车类
 */
public class BenzCar extends Car {

    //构造方法
    public BenzCar(int maxSpeed) {
        super("奔驰", maxSpeed); //确定品牌
    }
}
  • 宝马汽车
/**
 * 宝马汽车 继承 汽车类 实现 GPS接口
 */
public class BMWCar extends Car implements GPS {

    //构造方法
    public BMWCar(int maxSpeed) {
        super("宝马", maxSpeed); //确定品牌
    }

    //重写接口中的方法
    @Override
    public void positioning() {
        System.out.println("使用GPS定位...");
    }
}
  • 摩托车
/**
 * 摩托车 继承 机动车
 */
public class Motorcycle extends MotorVehicle {

    //空参构造
    public Motorcycle() { }

    //全参构造
    public Motorcycle(String brand, int maxSpeed) {
        super(brand, "摩托车", maxSpeed);  //确定类型为摩托车
    }
}
  • 雅马哈摩托车
/**
 * 雅马哈摩托车 继承 摩托车类
 */
public class YamahaMoto extends Motorcycle {

    //构造方法
    public YamahaMoto(int speed) {
        super("雅马哈", speed); //确定品牌
    }
}

  • 宝马摩托车
/**
 * 宝马摩托车 继承 摩托车 实现 GPS接口
 */
public class BMWMoto extends Motorcycle implements GPS {

    //构造方法
    public BMWMoto(int speed) {
        super("宝马", speed); //确定品牌
    }

    //重写接口中的方法
    @Override
    public void positioning() {
        System.out.println("使用GPS定位...");
    }
}
  • 测试
public class Demo {

    public static void main(String[] args) {
        //汽车
        BenzCar benzCar = new BenzCar(220);
        benzCar.run();

        BMWCar bmwCar = new BMWCar(230);
        bmwCar.run();
        bmwCar.positioning();

        //摩托车
        YamahaMoto yamahaMoto = new YamahaMoto(120);
        yamahaMoto.run();

        BMWMoto bmwMoto = new BMWMoto(125);
        bmwMoto.run();
        bmwCar.positioning();
    }
}

原文链接:https://qwert.blog.csdn.net/article/details/105341580

发布了369 篇原创文章 · 获赞 381 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Regino/article/details/105341580