第一章:抽象类
抽象类的使用原则如下:
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 包下是产品的实现类
答案链接