前言
努力复习,今天复习一下抽象类和接口
一、抽象类
1.抽象类的概念
继承可以在已有类的基础上衍生出新类,类变得越来越具体。但是如果一个类中没有足够的信息去描述这个类,它只能被继承,派生出子类,这就是抽象类!
举个例子,你正在开发一款图形编辑软件,很多各式各样的形状,三角形,矩形,椭圆。。。它们是不同的,但是又属于形状这个概念。从子类向父类追溯,类就变得宽泛,抽象了,大概体会到了抽象类是啥玩意了吧。
2.创建抽象类
/*
* [public] abstract class 类名[extends 父类][implements 接口列表]
* {
* 属性声明及初始化;
* 抽象方法的声明;
* 非抽象方法声明及方法体;
* }
*
* 注:抽象类中可以有抽象方法,也可以有非抽象方法
* 抽象方法必须是无方法体的方法
* 定义抽象类 使用abstract关键字实现
* */
出了点错误欸。。。
原来是里面抽象方法不能写方法体,一定要记得!!!接下来写一个完整的抽象类,在下文中会用到。
//定义一个柜子的抽象类
abstract class Chest{
double width; //柜子的宽度
double high; //柜子的高度
public void open(){
System.out.println("柜子能打开!");
}
public abstract void storage();//存放东西的方法
}
3.继承抽象类
抽象类不能直接创建对象,只有被继承了才能被创建对象,继承的方式和一般的类相同,继承的类必须要重写抽象类中的所有抽象方法。
//定义一个柜子的抽象类
abstract class Chest{
double width; //柜子的宽度
double high; //柜子的高度
public void open(){
System.out.println("柜子能打开!");
}
public abstract void storage();//存放东西的方法
}
class Wardrobe extends Chest{
@Override
public void storage() {
System.out.println("衣柜能存放衣服!");
}
}
class Bookcase extends Chest{
@Override
public void storage() {
System.out.println("书柜能放书!");
}
}
二、接口
1.接口概念
接口是一种用于描述类对外提供功能规范的、能够多重继承、特殊的抽象类。在现实中某些问题只能需要用多重继承描述,接口的出现完美解决了java类中只能单继承的问题。
2.创建接口
/*
* [public] interface 接口名 [extends 父类口列表]{
* //属性声明
* [public][static][final]属性类型 属性名 = 常量名;
* //方法声明
* [public][abstract]返回值类型 方法名 (参数列表)
*}
*注意:
* 修饰接口的修饰符和默认修饰符
* 接口可以是多重继承,接口只能继承接口,不能继承类
* 属性必须是常量(有初值),方法必须是抽象的(无方法体)
* 在接口中不使用abstract修饰的方法也是抽象方法
* */
//定义一个圆柱体接口
public interface Cylinder {
static final double PI = 3.14;//定义圆周率
public double area();//计算圆柱体面积的方法
public double bulk();//计算圆柱体体积的方法
}
3.实现接口
//实现圆柱体接口
class TestCylinder implements Cylinder{
double radius;
double high;
public TestCylinder(){
}
public TestCylinder(double radius, double high) {
this.radius = radius;
this.high = high;
}
@Override
public double area() {
return 2*PI*radius*high+PI*radius*radius*2;
}
@Override
public double bulk() {
return PI*radius*radius*high;
}
}
// 实现多个接口
public interface AA {
final static int a = 1;
public void Action1();
}
interface BB{
final static int b = 2;
public void Action2();
}
class MakeAA_BB implements AA,BB{
@Override
public void Action1() {
System.out.println(a);
}
@Override
public void Action2() {
System.out.println(b);
}
}