// 定义一个抽象类
abstract class Shape {
// 定义一个抽象方法
public abstract double calculateArea();
}
// 继承抽象类,并实现抽象方法
class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double calculateArea() {
return Math.PI * radius * radius;
}
}
public class Main {
public static void main(String[] args) {
Circle circle = new Circle(5);
System.out.println("Circle Area: " + circle.calculateArea());
}
}
模板方法设计模式
在Java中,模板方法模式通常通过抽象类来实现
// 抽象类定义了算法的骨架
abstract class AbstractClass {
// 模板方法定义了算法的步骤
public void templateMethod() {
step1();
step2();
step3();
}
// 抽象方法,由子类实现
abstract void step1();
abstract void step2();
// 钩子方法,子类可以选择性地覆盖
void step3() {
System.out.println("Default implementation of step3");
}
}
// 具体子类实现抽象类中的抽象方法
class ConcreteClass extends AbstractClass {
@Override
void step1() {
System.out.println("Step 1");
}
@Override
void step2() {
System.out.println("Step 2");
}
// 可选地覆盖钩子方法
@Override
void step3() {
System.out.println("Custom implementation of step3");
}
}
public class Main {
public static void main(String[] args) {
AbstractClass abstractClass = new ConcreteClass();
abstractClass.templateMethod();
}
}
接口
接口(Interface)是一种抽象类型,它定义了一组方法但没有实现这些方法的具体代码
接口可以包含常量和方法的声明,但不能包含方法的实现。
接口定义了一种契约,规定了实现该接口的类需要提供哪些方法。
类可以实现一个或多个接口,实现接口的类必须提供接口中定义的所有方法。
接口中的方法默认是公共的(public),因此实现接口的类中的方法也必须是公共的。
接口可以被用来实现多态性,通过接口的引用可以指向实现该接口的任何类的对象。
interface MyInterface {
//省略了public abstract的声明
void method1();
int method2(int x, int y);
}
class MyClass implements MyInterface {
@Override
public void method1() {
// 方法1的具体实现
}
@Override
public int method2(int x, int y) {
// 方法2的具体实现
return x + y;
}
}
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CustomAnnotation {
String value() default "This is a custom annotation";
}
public class MyClass {
@CustomAnnotation("Custom Annotation Example")
public void myMethod() {
// Your method implementation here
}
}
JUnit单元测试
所在的类必须是public,非抽象的,包含唯一的无参构造器
@Test标记的方法本身必须是public,非抽象的,非静态的,void无返回值,()无参数的
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class MyMath {
public int add(int a, int b) {
return a + b;
}
@Test
public void testAdd() {
MyMath math = new MyMath();
int result = math.add(3, 4);
assertEquals(7, result);
}
}