📜  Java的继承注解(1)

📅  最后修改于: 2023-12-03 15:16:37.207000             🧑  作者: Mango

Java的继承注解

在Java中,继承是一种非常重要的特性,它允许子类继承父类的行为和属性,从而避免了代码的重复。在Java中,我们可以使用继承注解来增强继承的功能,使得子类的行为更加灵活和可控。

1. @Override

在Java中,我们经常需要覆盖父类的方法,以便实现子类的特殊行为。为了防止误操作,Java引入了@Override注解,用于标记子类方法是覆盖父类方法而不是新建方法。如果你的代码有错误的Override注解,编译器会直接提示你的错误。

public class Parent {
    public void sayHello(){
        System.out.println("Hello");
    }
}

public class Child extends Parent {
    //使用 @Override 注解来覆盖父类的 sayHello 方法
    @Override
    public void sayHello(){
        System.out.println("Hello child");
    }
}
2. @Deprecated

有时候,在开发过程中,你可能会发现某个方法或类已经不再使用,但为了兼容旧版本的代码,你不得不将其保留。为了提醒其他开发人员这段代码已经过时,Java引入了@Deprecated注解,表示这个方法或类已经不再推荐使用。

public class MyClass {
    //使用 @Deprecated 注解标记该方法不再推荐使用
    @Deprecated
    public void oldMethod(){
        //...
    }
}
3. @SuppressWarnings

有时候,在开发过程中,你可能会使用一些让警告产生的代码,如使用了未使用的private变量或者强制类型转换等。为了减少这些警告的产生,Java引入了@SuppressWarnings注解,可以将指定的警告信息隐藏掉。

public class MyClass {
    @SuppressWarnings("unused") //使用 @SuppressWarnings 注解来隐藏没有使用的警告
    private int unusedVar = 0;
}
4. @FunctionalInterface

在Java8中,引入了Lambda表达式和函数式接口,并且为了标识一个接口是函数式接口,一般需要使用@FunctionalInterface注解。这个注解用来标记该接口是一个函数式接口,即该接口只有一个抽象方法,其他的方法都是默认实现或者静态方法。

@FunctionalInterface
public interface MyInterface {
    void sayHello();

    default void helloWorld() {
        System.out.println("Hello World!");
    }

    static void welcome() {
        System.out.println("Welcome!");
    }
}
5. @Inherited

在Java中,子类会继承父类的方法和属性,但是父类的注解不会被继承。为了让子类继承父类的注解,Java引入了@Inherited注解,可以让子类继承父类的注解。

@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation {
    String value();
}

@MyAnnotation("Parent")
public class Parent {
    //...
}

public class Child extends Parent {
    //...
}

上面的代码中,@MyAnnotation注解被标记了@Inherited注解,在子类Child中,也会继承该注解。

总结

继承注解是Java语言中的一个重要特性,通过使用它们,我们可以更好的控制子类行为、隐藏警告信息、标记过时代码、定义函数式接口等。掌握这些注解,可以让我们的代码更加优雅和高效。