JAVA中的抽象类和接口
抽象类
抽象类的定义
抽象类和普通类的区别
抽象类怎么去实现
接口类
接口类的定义
接口类如何实现
接口类和抽象类的区别
抽象类的定义:
由于不是所有的对象都是可以用类去描述,如果一个类不能完全描述一个对象,或者该类中的方法是抽象的,则这类成为抽象类。
定义该类使用”abstract“去修饰,定义抽象方法也是用“abstract”描述,抽象类通常用public或protect来修饰以便子类去实现该方法。
抽象类和普通类的关系:
抽象类不能像普通类实例化对象,不能用new操作符去创建对象。(所以抽象类必须需要创建一个子类来继承该抽象类,否则这个抽象类的创建没有意义)
可以定义构造器,但是由于不能实例化对象,构造其可以被用来子类的继承,所以构造器经常用protect来修饰,为了方便子类的使用。
如果一个继承了父类,则必须实现父类的抽象方法。
其他功能和普通类没有区别,子类都是使用extends来继承。
如图定义一个形状类,
abstract class Shape{
public int index;
public Shape(){
}
public abstract double countPerimeter();//获得周长
public abstract double countArea();//获得面积
public abstract String getType();// 获得形状
public void getshape(){//打印形状
System.out.println("shape");
}
}
class Circle extends Shape{//创建一个圆类去继承形状类事项所有的抽象方法
public double radius; //定义半径
public Circle(double radius) {//定义构造器
this.radius = radius;
}
public double countPerimeter() {
double perimeter=radius*3.14*2;
return perimeter;
}
public double countArea() {
double arae=3.14*Math.pow(radius,2);
return arae;
}
public String getType() {
return "圆";
}
}
抽象类的实现:
首先去实例化对象,这里必须是实例化对象必须是子类,拿上一段代码来说,必须是Circle类。
Circle C1=new Circle(2.0);
Circle C1=new Circle(2.0);
System.out.println(C1.countArea());
System.out.println(C1.countPerimeter());
在testdemo中去实现得到的结果,结果正确。
接口类:
接口可以理解为是一种特殊的抽象类,但是抽象类只能是单继承的,只能一个类继承另一个类,为了克服这种关系,就可以用到接口,接口可以一个类继承多个类,在java中,接口的好处是可以通过接口去继承多个接口。在java中,因为接口只管定义功能,不用管功能的具体实现。很多时候把一些功能定义为接口,就可以更具自己的需要选择需要实现的接口,以达到对一些功能的实现。
在java中定义一个抽象类
interface +接口名{
protect abstract void +方法名();
}
在接口类如何定义属性:
接口不能有构造器;
在接口中的所有变量都是public static final 修饰的(这是为了防止在子类继承父类中修改父类中的静态变量);
像抽象类一样定义abstract修饰的抽象方法;
在jdk1.8版本中,接口类中可以定义具有方法实现的方法,但是必须是静态方法或者接口默认方法(就是用static或者default修饰的方法),这里使用static是为了提高代码的复写,在实现接口的时候,我们必须重写所有的抽象方法,在接口实现的方法则不需要被重写。
接口类的实现:
一个类通过implments 关键字类实现接口,这里一个类可以实现多个接口。需要重写接口中的所有抽象方法。
如下我们创建一个计算器类,来简单的实现加减乘除
interface Compute{
void calculator(int num1,int num2);
}
class Add implements Compute{
public void calculator(int num1, int num2) {
System.out.println(num1+num2);
}
}
class Subbract implements Compute{//减法
public void calculator(int num1, int num2) {
System.out.println(num1-num2);
}
}
class Multiply implements Compute{//乘法
public void calculator(int num1, int num2) {
System.out.println(num1*num2);
}
}
class Divide implements Compute{
public void calculator(int num1,int num2){
System.out.println(num1/num2);
}
}
在testdemo中,通过实现了这个接口的子类去创建接口对象。
如下所示在testdemo去实现接口
Compute compute1 =new Add();
Compute compute2 =new Multiply();
compute1.calculator(13,15);
compute2.calculator(12,20);
运行结果如下所示
接口类和抽象类的区别:
1,接口不能包含普通方法,接口只能有抽象方法(jdk1.8之后可以有静态方法和默认方法),抽象类可以办函普通方法。
2,抽象在实现的过程中是单继承关系,一个类只能继承一个抽象类,而接口类可以是多实现,一个类可以事项多个接口。
3,在实现过程的关键字不同,接口用的是implments 来实现接口,抽象类用的是extends来继承抽象类。
4,接口不可以有构造方法,抽象类可以有构造方法。
5,接口只能定义静态常量属性且用final修饰,而抽象类即可以定义静态常量属性,也可以定义普通变量属性。