abstract(抽象类) interface(接口)

抽象类

有时候,基类并不与具体的事物相联系,而是只表达一种抽象的概念,用以为它的派生类提供一个公共的界面。因此,Java 中引入了抽象类的概念。
抽象类为所有子类提供了一个通用模板
通过抽象类可以避免子类设计的随意性,可以做到严格限制子类的设计,可以使子类之间更加通用

abstract(抽象类) interface(接口)

抽象例子

//求相同周长不同形状的面积
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(抽象类) interface(接口)

//所以可以写一个抽象类
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;
	}	
}

接口

abstract(抽象类) interface(接口)

接口例子

//接口定义与实现
//格式
[访问修饰符] 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方法