我们知道,在一个学习软件中,不同的身份有不同的权限,老师有教师权限,学生有学生权限,就好像微信群里的群主和群员。那么如何用JAVA初步的实现“给与不同身份的人员相应的权限”呢?JAVA中的接口就可以做到。
如图,定义一个叫做“Rights”的接口;
接口:是一个特殊类型的引用类型,它是方法签名(即方法名、参数列表和返回值类型)的集合,用于定义一组公共的、抽象的行为规范。;
接口中可以声明并初始化常量,这些常量隐含地是public、static、final的。
public interface Rights{
//定义一个叫做“handInHomework”的方法
void handInHomework();
//注意:接口不提供方法的具体实现,也就是说,接口中所有的方法默认是抽象的,接口中所有的方法体仅定义了方法签名(方法名、参数列表和返回类型),但从Java8开始,接口还可以包括默认方法和静态方法,与抽象方法不同,这两种方法是可以具体实现的。
}
在Java中,一个类可以通过implements关键字实现多个接口,从而继承多个接口中所有的抽象方法
这里定义了类Student来实现接口Rights中的方法;
public static class Student implements Rights{
@Override
public void handInHomework(){
System.out.println("Phew!I almost forget to submit my homework.")
}
}
注意:实现接口的类必须提供接口中所有未实现的方法,否则该类就必须声明为抽象类;
抽象类:使用abstract关键字修饰的类被称为抽象类,它是一种特殊的类,主要用于表示一种抽象的概念或定义一个类族的通用结构;
声明抽象类的语法:
abstract class AbstractClassName{
类体部分,可以包括抽象方法或非抽象方法
}
抽象方法:抽象类可以包括一个或多个抽象方法,抽象方法只有方法签名,没有方法体。
声明抽象方法的方式:public abstract returnType
methodName(parameters);
public static void main(String[] args){
//因为接口是一个抽象的概念,它不能被实例化,只能通过实现它的类创建对象来调用接口定义的方法
//因此,如果Student类前面不加static就会发生报错
//"cannot be referenced from a static context",译为:无法从静态上下文引用
//静态上下文:在静态方法或块中工作的场景,这些无需对象实例化即可被调用或执行
//然而,非静态成员是与类的具体实例紧密相关的,它们只能通过对象来引用访问
//静态类:实际上指的是静态内部类。静态内部类是定义在另一个类内部并被static关键字修饰的类,它可以独立于外部类实例存在,并且可以直接通过类名访问,不需要外部类实例。静态内部类不能访问外部类的非静态成员,但可以访问静态成员。
//静态属性和方法:类的静态属性和方法是在类加载时就分配内存空间并且在整个应用生命周期共用同一份数据,可以通过类名直接调用,不需要任何实例。
Rights LiHua = new Student();
LiHua.handInHomework();
}
最后,运行一下。
Phew!I almost forget to submit my homework.