abstract(抽象类) interface(接口)
抽象类
有时候,基类并不与具体的事物相联系,而是只表达一种抽象的概念,用以为它的派生类提供一个公共的界面。因此,Java 中引入了抽象类的概念。
抽象类为所有子类提供了一个通用模板
通过抽象类可以避免子类设计的随意性,可以做到严格限制子类的设计,可以使子类之间更加通用
抽象例子
//求相同周长不同形状的面积
class Square{//正方形面积
private double c;//定义周长
public Squre(){//无参构造
}
public Squre(double c){//有参构造
this.c = c;
}
public double area(){//求面积方法
return 0.0625*c*c;
}
}
class Square{//圆形面积
private double c;//定义周长
public Circle(){//无参构造
}
public Circle(double c){//有参构造
this.c = c;
}
public double area(){//求面积方法
return 0.0796*c*c;
}
}
发现类Circle和类Square有共同的方法和变量,只是方法体不同
//所以可以写一个抽象类
abstract class Shape{
priavte double c;
public Shape(){
}
public Shape(double c){
this.c = c;
}
public abstract double area();//构造方法,只有定义没有方法体,用一个分号结尾
}
继承抽象类
//继承抽象类 必须重写其抽象方法
class Square extends Shape{
private double c;
public Square(){}
public Square(double c){
super(c);
}
public double area(){
return 0.0625*c*c;
}
}
class Circle extends Shape{
private double c;
public Circle(){}
public Circle(double c){
super(c);
}
public double area(){
return 0.0796*c*c;
}
}
接口
接口例子
//接口定义与实现
//格式
[访问修饰符] interface 接口名 [extends 父接口1,父接口2...]{
>定义常量 //总是用public static final定义 都是大写
>定义方法 //总是用public abstract定义
}
//实现接口
>子类通过implements来实现接口中的规范
>接口不能创建实例,但是可以用于声明引用变量类型
>一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的
>java的类只支持单继承,接口支持多继承
interface Runner{
public static int DEFAULT_SPEED = 100;//接口中不可以定义成员变量,但可以定义常量
public static final int NUM=100;
}
public void run();//接口中只可以定义没有实现的方法(可以省略public abstract)
//接口继承
interface Runner{
public void run();//只定义方法,没有方法体
}
interface Hunter extends Runner{
public void hunt();//只定义方法,没有方法体
}
//接口实现
class AmericanCul implements Hunter{
public void run(){
//方法体
}
public void hunt(){
//方法体
}
}
//必须要实现Hunter接口中的hunt方法以及父类接口Runner中的run方法