java中抽象类与接口(安卓开发常见的接口)
抽象类和接口就好比一个框架,而具体的实现交给子类,就好比学习语文造句,“如果…那么…”就是一个框架,而造出来的句子就属于具体实现部分。
抽象类:被abstract修饰符所修饰的类或者方法称为抽象类和抽象方法
- 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类
- 抽象类一般作为父类使用,即不能使用new来创建对象,要让子类继承抽象类
- 抽象方法的话就是在抽象类中作声明,方法的的实现让子类实现
- 子类继承抽象类的时候必须去实现抽象类的所有抽象方法,否则也要声明为抽象类
下面定义一个抽象类:
A类:
public abstract class A {
public abstract void fun(); //抽象方法fun,函数主体交给子类实现
public abstract void fun2(); //抽象方法fun2,函数主体交给子类实现
public void fun3(){ //普通方法
System.out.println("fun3");
}
}
B类(继承A类):
public class B extends A {
@Override //方法重写的标记
public void fun() {
System.out.println("fun"); //函数主体实现
}
@Override //方法重写的标记
public void fun2() {
System.out.println("fun2"); //函数主体实现
}
}
可以看到B类继承抽象类A,并且要想不报错,B类必须重写A类所有抽象方法,即A类所有抽象方法要得以实现。
但是用抽象类的话,依然只能用到继承,而java偏偏是单继承,所以下面我们来介绍可以多继承的接口。
接口:
- 接口中所有的方法都是抽象的,不过接口中可以不写abstract,在接口中所有方法都会被默认成abstract。
下面定义A接口:
public interface A {
void delete(); //默认带有abstract,就是抽象方法,同样也需要子类去实现接口中方法
void add();
void update();
void query();
}
B类去实现A接口:
ppublic class B implements A {
@Override
public void delete() {
System.out.println("delete");
}
@Override
public void add() {
System.out.println("add");
}
@Override
public void update() {
System.out.println("update");
}
@Override
public void query() {
System.out.println("query");
}
}
同时在我们定义这些抽象方法的时候左边出现了一个绿色I图标,箭头朝下,通过点击可以索引到那些实现这些抽象方法的地方,而在实现接口的类中重写这些方法在左边也出现了一个绿色图标,箭头朝上,通过点击可以找到这些抽象方法具体在哪个接口。这样就形成了首尾呼应。
另外,如果一个接口他其中只有一个方法,就可以使用lambda表达式去简化。
要想实现多继承,只需要在implements后面再写一个接口的名字即可,这样就可以在java中实现多继承了!
public class B implements A, C{
...
}