内容发布更新时间 : 2024/11/18 15:21:28星期一 下面是文章的全部内容请认真阅读。
抽象类
什么是抽象类?
JAVA允许在类中只声明方法而不提供方法的实现。 这种只有声明而没有方法体的方法称为抽象方法,而包含一个或多个抽象方法的类称为抽象类。
抽象(abstract)类:
抽象类是以abstract关键字为开头的类。 抽象方法在声明中也要加上 abstract 。
abstractclass Employee{ }
//抽象类:以abstract关键字为开头的类
abstractvoidraiseSalary(); //抽象方法:只有声明而没有方法体的方法
注意:
1. 抽象类在使用上有特殊的限制,即不能创建抽象类实例。
2. 如果抽象类的子类实现了抽象方法,即可以创建该子类的实例对象,否则该子类也是抽
象类(对,没有看错),也不能创建实例。
3. So,一般将抽象类构造方法的访问权限声明为protected而不是public,从而保证这个
构造方法能由其子类调用,而不被其他无关的类调用。 关于注意点1和2的代码:
abstractclassEmployee{ }
classManagerextendsEmployee{ //抽象类的子类 }
publicstaticvoidmain(String[] args) {
}
Employee e = new Manager(); Employee e = newEmployee();
//创建Employee 子类 Manager的对象 //错误!Employee为抽象类
voidraiseSalaty(inti){ //实现抽象方法 }
System.out.println(\);
//抽象类:以abstract关键字为开头的类
abstractvoidraiseSalary(inti); //抽象方法:只有声明而没有方法体的方法
抽象类的作用
Eg.现在有 4 个类, Shape()—形状类 Circle()---圆形类 Square()---正方形类 Triangle()---三角形类 在这四个类中
Color( ) 属性定义在父类里
show( ) 方法可以定义成抽象方法
Shape 类是顶层类。*实际上Shape类的对象是没有实际意义的。* 定义Shape类的目的并不是为了在程序中创建并操作它的对象,而是为了定义几何形状类体系的通用接口,这些接口在Shape类中并不需要给出具体实现,而由它的各个子类提供自己的实现。
还有如果设计者如果想禁止创建某个类的实例对象,只需要在类的声明加abstract关键字。
抽象类的总结
抽象类:专门设计让子类继承的类 特点:
包括一个或多个抽象方法(只有方法说明,没有方法体); 如果子类不是抽象类,必须实现其父类的抽象方法; 抽象类不能被实例化(即不能直接创建对象);
抽象类不一定要包含抽象方法,若类中包含了抽象方法,则该类必须被定义为抽象类。
接口(interface)
Java的接口使抽象类的概念的更深一层。接口是一种“纯”抽象类。 接口中声明了方法,但不定义方法体。 为什么要使用接口?
类继承对于重用父类中的代码很有用,而Java只支持单继承,在遇到需要多继承的情况,可以通过接口来帮助实现
接口的定义:
“正规”的接口的定义写法: interface接口名称 {
finalstatic数据类型成员变量=值;//常量
publicabstract返回类型方法名称(参数…);//抽象方法 }
注意事项:
1. 成员变量必须为常量 2. 方法必须为抽象方法
萌新前面特意强调“正规”,让我们来看这么一段代码: interface iShape2D{
doublepi=3.14; //成员变量必须初始化
area(); //抽象方法,没有方法体 }
为什么这段代码里的接口中定义的常量没有加final,而且声明的方法也没有加abstract 因为
1. 在接口中定义的常量默认具有public,final,static的属性。(常量名通常大写)。
2. 在接口中声明的方法默认具有public和abstract属性。
另外:如果在子接口中定义了父接口同名的常量和方法,则父接口中的常量被隐藏,方法被重写。
接口的实现与使用
接口类:类的声明中用imlements子句来表示一个类实现了某个接口,在类中可以使用接口的常量,而且必须实现接口中定义的所有方法。