接口:interface
- 接口是将抽象的行为封装在接口中,供子类重写
- 定义:
- 对行为(方法)的抽象
- 一个类可以实现多个接口
- 接口只是对方法进行定义,而一个类中可以有多个接口
- 特点:
- 接口用 interface 实现
- 接口中所有的成员变量都是由 public static final 修饰的(默认,可不写)
- 接口中的所有方法默认都是 public abstract 修饰的
- 接口没有构造器,构造方法用于创建对象(接口没办法 new 创建对象),但是可以使用多态
- 实现接口的类中,必须实现接口中所有的方法,如果不实现接口中所有的方法,那么该类是抽象类
- 接口和接口之间可以相互继承
- 与继承关系类似,接口与实现类之间存在多态性
- 实现:
- 只需要对方法的定义
-
public interface Animal{ public void jump(); } public class Text implements Animal{ //对接口中的方法进行实现 public void jump(){\ } }
- 注意:子类在继承接口时,强制子类实现就口中的方法
抽象类:abstract
-
需要继承使用
-
作用:抽象类更多偏向于对模板的设计
-
特点:
-
由 abstract 修饰的类叫做抽象类,也可使修饰抽象方法
-
abstract 修饰的抽象方法可以不在抽象类中实现,但子类必须重写并实现该方法
-
只有抽象类当中才能有抽象方法,普通类中不能有抽象方法
-
抽象类中不一定全是抽象方法,也可以有普通方法,普通方法可以不被子类重写
-
抽象类不能被实例化,但是可以使用多态
-
final 不能和 abstract 同时使用
-
final 修饰的方法禁止被重写
-
abstract 修饰的方法要求子类重写
-
两者相互冲突
-
-
private 修饰的方法子类不可见,abstract 修饰的方法要求重写,两者冲突
-
抽象方法不能使用 static
-
static 是针对类层次
-
抽象方法针对的是对象层次
-
不能一起使用
-
-
抽象类可以有构造方法
-
目的是子类初始化之前先初始化父类
-
即在 new 子类构造器(),之前先 new 父类构造器
-
-
子类继承父类之后如果不想实现父类中的抽象方法,那么该类必须是一个抽象类
-
注解:
- 用 @interface 实现:
- 作用:
- 注解一般用于对程序的说明,就像注释一样
- 注释是给人看的,注解是给机器看的
-
public @interface DemoTest { }
- 让编译器进行编译检查的作用
- @Override 注解是重写的意思,子类重写父类方法,但是改动了方法名,所以报错
- @Override 注解是重写的意思,子类重写父类方法,但是改动了方法名,所以报错
- 注解一般用于对程序的说明,就像注释一样
- 格式:
- @注解名() 的形式
- 如:@SuppressWarnings(value = "unchecked")
- 使用位置:
- 可以附加在 package、method、field 等上面,相当于给他们添加了额外的辅助信息
- 可以通过反射的方式对这些注解进行访问
- 注解的类型:
- 内置注解:
- 定义:JDK 提供,有相供应功能的注解
- @Override:修饰方法的注解,表示一个方法重写了父类的方法
- @Deprecated:修饰方法、属性、类,表示不鼓励程序员使用这样的元素。通常来讲是被遗弃
- @SupperssWarnings:用来一致编译时警告信息
- 元注解:
- 定义:用于注解的注解(帮助创建注解的注解)
- @Target注解:
- 表示:用来描述注解的使用范围,即注解可以使用在什么地方,在定义注解时使用这个注解可以更加清晰的知道它的使用范围
- TYPE:类,接口
- FIELD:成员变量
- METHOD:方法
- PARAMETER:方法参数
- CONSTRUCTOR:构造方法
- LOCAL_VARIABLE:局部变量
- ANOTATION_TYPE:注解类
- PACKAGE:包
- TYPE_PARAMRETER:类型参数
- TYPE_USE:使用类型的任何地方
- @Retention注解:
- 表示:这个注解在什么时候还有效,用于描述注解的生命周期
- SOURCE:源文件保留
- CLASS:编译期保留,默认值
- RUNTIME:运行期间保留,可以通过反射去获取注解信息。定义的类一般用这个
- @Documented:标注生成 javadoc 的时候被记录了(了解即可)
- @Inhertied:使它修饰的注解具有继承性
- 实现:
- 定义注解:
@Retention(RetentionPolicy.RUNTIME) //在运行期间保留 @Target(ElementType.TYPE) //作用在类上 public @interface DemoTest { String url() default ""; //定义注解中的变量 --->默认值为空 String name() default ""; ······ }
- 使用:
@DemoTest(url = "test") public class Test{ }
- 定义注解:
- @AnnotatedElement接口:
- 所有的域(类、方法、属性、包等)都实现了这个接口,接口中定义了获得注解的方法
- 方法:
- getAnnotation( 指定类型注解 ):
- 如果该元素有指定类型的注解则返回这些注解,否则返回 null
- getAnnotations( 指定类型注解):
- 如果指定类型注解的注解存在于此元素上,则返回 true,否则返回 false
- getAnnotation( 指定类型注解 ):
- 内置注解: