一、抽象类
抽象类的概念:用abstract修饰的类称为抽象类,用abstract 修饰的成员方法称为抽象方法。
完整的类有方法并且都已经实现,抽象类就是那些不完整的类,有部分方法没有方法体(没有实现)
1.抽象类的创建和使用
//创建一个抽象类
public abstract class Shape {
int area;//面积
public abstract void calArea(); //计算面积方法(没有实现)
}
//继承自Shape抽象类
public class Rectangle extends Shape{
int width; //宽
int length; //长
public Rectangle(int length, int width) {
this.length = length;
this.width = width;
}
public void calArea() {//必须把这个抽象方法给实现了
System.out.println(this.length * this.width);
}
public static void main(String[] args) {
Rectangle rect = new Rectangle(10,5);
rect.calArea();
}
}
- 子类继承抽象类就必须实现抽象类的所有方法要不就被定义为另一个abstract
- 在抽象类中,非抽象方法可以调用抽象方法。
- abstract不能与final并列修饰同一个类(产生逻辑矛盾);
二、接口
接口的两种含义:
可以被引用调用的方法(public方法或同包中的protected方法或默认方法);
另一种是同“类”概念地位相当的专有概念interface, interface是方法说明的集合。
抽象类的极致,所有方法都没有实现,那么这个类被称为接口
1.接口的创建和使用
//创建一个洗衣机的接口
public interface Washer {
public static final int ON = 1 ;
public static final int OFF = 0 ;
abstract void startUp(); //启动
abstract void letWaterIn(); //进水
abstract void washClothes(); //洗衣
abstract void letWaterOut(); //排水
abstract void stop(); //停止
}
//实现这些接口
class RoseBrand implements Washer{
public void startUp(){ System.out.println("startUp");}
public void letWaterIn(){System.out.println("letWaterIn");}
public void washClothes(){System.out.println("washClothes");}
public void letWaterOut(){System.out.println("letWaterOut");}
public void stop(){System.out.println("stop");}
public void dehydrate(){System.out.println("dehydrate ");}//脱水
}
//使用
public class Consumer {
public static void main(String args[]){
//接口声明引用实现接口的RoseBrand类的对象。
Washer w = new RoseBrand();
w.startUp();
w.letWaterIn();
w.washClothes();
w.letWaterOut();
w.stop();
//w.dehydrate ();当通过接口调用玫瑰洗衣机类独有的,
//接口未定义的功能方法,编译会报错。
}
}
- 继承和实现是同时的,可以继承一个类实现很多接口implements.
- 接口可以继承接口
- 接口中一般定义的都是方法,如果想定义数据成员的话,默认全部都是静态常量。可以缺省public static final