[Java] 继承与抽象类相关题目

目录

  • 继承与抽象类相关题目
    • 1. 继承
      • a. 问答题
      • b. 问答题
      • c. 编程题
      • d. 编程题
    • 2. 抽象类
      • a. 问答题
      • b. 编程题
    • 3. 模板设计模式
      • a. 编程题


继承与抽象类相关题目

1. 继承

a. 问答题

1. 请问子类继承父类用什么关键字?

	继承使用 extends 关键字。

2. 请问子类继承父类的好处是什么?

	提高了代码的复用性,
	让类与类之间产生继承关系(多态的前提)。

3. 请问父类的哪些成员不能被继承,或者不能被访问?

	父类中的构造方法不能被子类继承,
	父类中的私有成员变量和成员方法能够被子类继承,只是无法直接访问,可以间接访问父类中的私有成员。

4. 请问子类是否可以同时继承多个父类?

	不可以,Java 中的类只能单继承,但可以多层继承,Java 中所有的类都直接或间接继承了 Object 类。

b. 问答题

  1. this 对象代表的是 Student 对象还是 Person 对象?
class Person {
     

    public Person() {
     
        System.out.println("this:" + this);
    }
}

class Student extends Person {
     

    public Student() {
     
    }
}

public class Demo1 {
     

    public static void main(String[] args) {
     

        new Student(); 
    }
}

参考答案:

  • 创建子类对象的时候,默认会先调用父类的构造方法。
  • 如果创建子类对象的时候,子类对象调用了父类的方法,那么父类的方法 this 代表的是子类对象。
  • 整个代码中只是创建了 Student 对象,何来Person对象?所以 this 代表的是 Student对象(谁调用就代表谁)。

c. 编程题

  1. 题目:
    我们计划为一个电器销售公司制作一套系统,公司的主要业务是销售一些家用电器,例如:电冰箱、洗衣机、电视机产品。
    类的设计为:
    • 冰箱类
      属性:品牌、型号、颜色、售价、门款式、制冷方式;
    • 洗衣机类
      属性:品牌、型号、颜色、售价、电机类型、洗涤容量;
    • 电视类
      属性:品牌、型号、颜色、售价、屏幕尺寸、分辨率。
  2. 要求:
    请根据上述类的设计,抽取父类“电器类”,并代码实现父类“电器类”、子类“冰箱类”,“洗衣机类”、“电视类”。

参考答案:

  • 电器类
/**
 * 电器
 */
public class ElectricalAppliance {
     
    //成员变量
    private String brand; //品牌
    private String model; //型号
    private String color; //颜色
    private double price; //售价

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

    //全参构造
    public ElectricalAppliance(String brand, String model, String color, double price) {
     
        this.brand = brand;
        this.model = model;
        this.color = color;
        this.price = price;
    }

    //getter & setter 略...
}
  • 冰箱类
/**
 * 冰箱
 */
public class Refrigerator extends ElectricalAppliance {
     

    private String doorStyle; //门款式
    private String refrigerationMode; //制冷方式

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

    //全参构造
    public Refrigerator(String brand, String model, String color, double price, String doorStyle, String refrigerationMode) {
     
        super(brand, model, color, price);
        this.doorStyle = doorStyle;
        this.refrigerationMode = refrigerationMode;
    }

    //getter & setter 略...
}
  • 洗衣机类
/**
 * 洗衣机
 */
public class WashingMachine extends ElectricalAppliance {
     

    private String motorType; //电机类型
    private String washingCapacity; //洗涤容量

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

    //全参构造
    public WashingMachine(String brand, String model, String color, double price, String motorType, String washingCapacity) {
     
        super(brand, model, color, price);
        this.motorType = motorType;
        this.washingCapacity = washingCapacity;
    }

    //getter & setter 略...
}
  • 电视类
/**
 * 电视
 */
public class Television extends ElectricalAppliance {
     

    private String screenSize; //屏幕尺寸
    private String resolutionRatio; //分辨率

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

    //全参构造
    public Television(String brand, String model, String color, double price, String screenSize, String resolutionRatio) {
     
        super(brand, model, color, price);
        this.screenSize = screenSize;
        this.resolutionRatio = resolutionRatio;
    }

    //getter & setter 略...
}

d. 编程题

  1. 题目:
    我们计划为一个动物园制作一套信息管理系统,根据与甲方沟通,我们归纳了有以下几种动物需要记录到系统中:
    • 鸟类:鹦鹉、猫头鹰、喜鹊
    • 哺乳类:大象、狼、长颈鹿
    • 爬行类:鳄鱼、蛇、乌龟
  2. 要求:
    请根据以上需求,使用“继承”设计出三层的类结构:
    • 动物类:
      • 鸟类:
        鹦鹉类
        猫头鹰类
        喜鹊类
      • 哺乳类:
        大象类
        狼类
        长颈鹿类
      • 爬行类:
        鳄鱼类
        蛇类
        乌龟类
    • 作为父类的类都应该定义一些共性内容,每种子类也都有一些特定的内容;
      重点是类的层次结构,类成员简单表示即可。

参考答案:

  • 动物类
/**
 * 动物
 */
public class Animal {
     

    private int age; //年龄

    public void move() {
     
        System.out.println("动物会动...");
    }
    
    //空参构造、全参构造、getter、setter 略...
}
  • 鸟类
/**
 * 鸟类
 */
public class Bird extends Animal {
     

    //重写父类的方法
    @Override
    public void move() {
     
        System.out.println("鸟在天上飞...");
    }

    //空参构造、全参构造、getter、setter 略...
}
  • 鹦鹉类
/**
 * 鹦鹉
 */
public class Parrot extends Bird {
     

}
  • 猫头鹰类
/**
 * 猫头鹰
 */
public class Owl extends Bird {
     

}
  • 喜鹊类
/**
 * 喜鹊
 */
public class Magpie extends Bird {
     

}
  • 哺乳类
/**
 * 哺乳类  继承动物类
 */
public class Mammal extends Animal {
     

    //重写父类的方法
    @Override
    public void move() {
     
        System.out.println("哺乳动物拥有快速运动的能力...");
    }

    //自己特有的方法
    public void nervousSystem() {
     
        System.out.println("哺乳动物拥有发达的神经系统...");
    }

    //空参构造、全参构造、getter、setter 略...
}
  • 大象类
/**
 * 大象  继承哺乳类
 */
public class Elephant extends Mammal {
     
    
}
  • 狼类
/**
 * 狼  继承哺乳类
 */
public class Wolf extends Mammal {
     

}

长颈鹿类

/**
 * 长颈鹿  继承哺乳类
 */
public class Giraffe extends Mammal {
     
    
}

爬行动物

/**
 * 爬行类  继承动物类
 */
public class Reptile extends Animal {
     

    //重写父类的方法
    @Override
    public void move() {
     
        System.out.println("爬行动物都在地表爬行...");
    }

    //自己特有的方法
    public void ectotherm() {
     
        System.out.println("爬行动物没有体温调节能力...");
    }

    //空参构造、全参构造、getter、setter 略...
}
  • 鳄鱼类
/**
 * 鳄鱼  继承爬行类
 */
public class Crocodile extends Reptile {
     
    
}
  • 蛇类
/**
 * 蛇  继承爬行类
 */
public class Snake extends Reptile {
     
    
}
  • 乌龟类
/**
 * 乌龟  继承爬行类
 */
public class Tortoise extends Reptile {
     
    
}

2. 抽象类

a. 问答题

1. 请问定义抽象类、抽象方法使用的关键字是什么?

	定义抽象的关键字是 abstract

2. 请问定义抽象类有什么作用?

	抽象类的作用是为了被子类继承,体现的是模板思想。

3. 请问定义抽象方法有什么作用?

	抽象方法只有方法签名,没有方法体,需要被子类重写,起到了“规范”的作用。

4. 请问一个类继承了抽象类后,必须要做的事情是什么?

	继承抽象类后,必须要重写抽象类中的抽象方法。

5. 请问抽象类是否可以继承其它抽象类?

	抽象类可以继承其他的抽象类,继承其他抽象类后,可以选择性的重写父类中的抽象方法。

b. 编程题

  1. 题目:
    我们计划为一所体育学校设计一套系统,需要记录以下人员的信息:
    • 教练员:
      属性:员工编号、姓名、性别、年龄
      行为:吃饭(吃工作餐)
    • 运动员:
      属性:学员编号、姓名、性别、年龄、所在班级
      行为:吃饭(吃营养餐)
  2. 要求:
    请根据需求,设计、并编码实现:父类 “人员类”,子类 “教练员类”、子类 “运动员类”,并包含共有的属性和行为的定义,由于运动员和教练员的吃饭的内容不同,所以需要设计为 “抽象方法”。

3. 模板设计模式

a. 编程题

  1. 题目:
    某公司的系统中需要记录两类员工:
    • 员工类:
      属性:工号、姓名、年龄
      行为:发布通知
    • 经理类:
      属性:工号、姓名、年龄、年终奖额
      行为:发布通知
      任何员工发布“通知”都统一使用以下格式:
      通知:
      xxxxxxxxx
      xxxxxxxxx
      必胜环球科技有限公司
  2. 要求:
    请按需求为这两个类定义一个父类,并使用 “模板” 发布通知。

参考答案:

  • 人员类
/**
 * 人员类
 */
public abstract class Person {
     

    private String id; //编号
    private String name; //性别
    private String gender; //性别
    private int age; //年龄

    
    //空参构造
    public Person() {
     
    }
    
    //全参构造
    public Person(String id, String name, String gender, int age) {
     
        this.id = id;
        this.name = name;
        this.gender = gender;
        this.age = age;
    }

    //吃饭(抽象方法)
    public abstract void eat();

    //getter、setter 略...
}
  • 教练员类
/**
 * 教练员  继承人员类
 */
public class Coach extends Person {
     

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

    //全参构造
    public Coach(String id, String name, String gender, int age) {
     
        super(id, name, gender, age);
    }

    //重写父类中的抽象方法
    @Override
    public void eat() {
     
        System.out.println("教练员吃工作餐...");
    }


    //getter、setter 略...
}
  • 运动员类
/**
 * 运动员  继承人员类
 */
public class Athletes extends Person {
     

    //特有属性
    private String className; //所在班级名称

    //空参构造
    public Athletes() {
     

    }

    //全参构造
    public Athletes(String id, String name, String gender, int age, String className) {
     
        super(id, name, gender, age);
        this.className = className;
    }

    //重写父类中的方法
    @Override
    public void eat() {
     
        System.out.println("运动员吃营养餐");
    }

    //getter、setter 略...
}

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

你可能感兴趣的:(Java,java,继承,抽象类,设计模式)