Java 面向对象进阶

发布时间 2023-12-14 00:13:31作者: 粥粥alg

第一章:抽象类

抽象类的使用原则如下:

1.1 抽象类(上)

  • (1)抽象方法必须用 public 修饰或者 protected 修饰(因为如果用 private 修饰,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为 public;

  • (2)抽象类不能直接实例化,需要依靠子类采用向上转型的方式处理;

  • (3)抽象类必须有子类,使用 extends 继承,一个子类只能继承一个抽象类;

  • (4)子类(如果不是抽象类)则必须覆写抽象类之中的全部抽象方法。(如果子类没有实现父类的抽象方法,则必须将子类也定义为为 abstract 类。)

1.2 汽车的轮子

请创建一个抽象类 Vehicle ,添加 NoOfWheels 抽象方法,并在 Vehicle 的子类 Car 和 Motorbike 中重写 NoOfWheels 方法。

Car.java

public class Car extends Vehicle{	

    public String NoOfWheels() {
        return "This car has four wheels";
    }
}

Motorbike.java

public class Motorbike extends Vehicle{
    public String NoOfWheels() {
        return "This Motorbike has two wheels";
    }
}

Vehicle.java

public abstract class Vehicle {
	public abstract String NoOfWheels();
}

1.3 制作一杯咖啡

你的朋友学习了如何制作咖啡,现在她邀请你和她一起完成制作一杯咖啡,你非常开心的接受了她的要求。现在她已经创建了一个名为 Coffee 的类,还有两个继承自 Coffee 类的子类,分别为 GroundCoffee 和 BrewingCoffee,在 Main 类中创建了 GroundCoffee 和 BrewingCoffee 的实例。那么你现在需要帮助她完成咖啡的制作:

  • 在 Coffe 类中声明一个 MakeCoffee 方法,使其返回一个字符串值,并在 GroundCoffee 类中通过 System.out.println() 显示 Coffee being ground! 的提示消息
  • 在 BrewingCoffee 类中通过 System.out.println() 显示 Coffee being brewed! 的提示消息

BrewingCoffee.java

class BrewingCoffee extends Coffee {
    // write your code here
     public String MakeCoffee(){
         System.out.println("Coffee being brewed!");
        return "Coffee being brewed!";
    }
}

Coffee.java

abstract class Coffee {
    // write your code here
    public abstract String MakeCoffee();
}

GroundCoffee.java

class GroundCoffee extends Coffee {
    // write your code here
    public String MakeCoffee(){
    System.out.println("Coffee being ground!");
    return "Coffee being ground!";
    }
}

1.4创建 Person 抽象类

Person.java


public abstract class Person {
    public abstract String print();
    private String className;
    public Person(String name){
        this.className = name;
    }
    public String getClassName()
    {
        return this.className;
    }
}

Student.java

public class Student extends Person{
    @Override
    public String print(){
        return "class extends Person abstract class.";
    }
    public Student(String name){
        super(name);
    }
}

1.5 抽象工厂模式

抽象工厂模式,是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为 Kit 模式,属于对象创建型模式,是一种创建对象的最佳方式。请您根据 Main 中对 AbstractFactory 工厂的使用,设计一个抽象工厂模式。
factory 包的相关说明:

FactoryProducer(工厂生成器) 用于获取 AbstractFactory 工厂,通过传递类型信息来获取实体类(extension 包下的扩展工厂)的对象
extension 包的说明:
ClothesFactory 创建扩展 AbstractFactory 的服装工厂类
FoodFactory 创建扩展 AbstractFactory 的食物工厂类
VehicleFactory 创建扩展 AbstractFactory 的交通工具工厂类
product 包的相关说明:

ifs 包下是产品的接口
Food :食物产品接口
Clothes :服装产品接口
Vehicle :交通工具产品接口
impl 包下是产品的实现类
答案链接

第二章 接口