抽象类与接口
1、抽象类
抽象类用来定义子类的公共方法的模板。例如:将人定义成一个抽象类,里面定义一个抽象方法->我有一双手,声明一个学生类继承人这个类,那么学生类就可以实现我的一双手是用来学习、写字的;声明一个农民类继承人这个类,那么农民类就可以实现我的一双手是用来种地,为人民生产粮食,解决大众温饱的(下面有代码示例)
1、抽象类和抽象方法都需要被abstract修饰
2、抽象类不可被实例化;
3、抽象类有构造方法,便于子类实例化;
4、抽象类中可有抽象方法,也可有非抽象方法,抽象方法只有方法声明,没有方法体;
5、抽象类的子类(这个子类非抽象类)需要重写抽象类中的抽象方法;
6、abstract不能用来修饰私有方法、静态方法、final修饰的方法,因为抽象方法需要子类来重写方法;
代码示例:
public class Test {
public static void main(String[] args) {
//报错,抽象类不可被实例化
//XiaoQi xiaoQi = new XiaoQi();
XiaoQi xiaoQi = new Xiaoqi1();
xiaoQi.absMethod01();
xiaoQi.absMethod02();
}
}
class Xiaoqi1 extends XiaoQi{
@Override
public void absMethod01() {
System.out.println("XiaoQi类->继承重写类,重写抽象方法01");
}
@Override
public void absMethod02() {
System.out.println("XiaoQi类->继承重写类,重写抽象方法02");
}
}
abstract class XiaoQi{
//抽象方法
public abstract void absMethod01();
//抽象方法
public abstract void absMethod02();
//非抽象方法
public void noAbsMethod01(){
System.out.println("非抽象方法01");
}
}
输出内容:
XiaoQi类->继承重写类,重写抽象方法01
XiaoQi类->继承重写类,重写抽象方法02
1.1、抽象类的匿名子类
方便而已,代码写法示例如下:
public class Test {
public static void main(String[] args) {
//写法一:
XiaoQi xiaoQi = new XiaoQi() {
@Override
public void absMethod01() {
System.out.println("1->抽象类的匿名子类01");
}
@Override
public void absMethod02() {
System.out.println("1->抽象类的匿名子类02");
}
};
method(xiaoQi);
System.out.println("++++++++++++++++++++++++++++++++++");
//写法二:
method(new XiaoQi() {
@Override
public void absMethod01() {
System.out.println("2->抽象类的匿名子类02");
}
@Override
public void absMethod02() {
System.out.println("2->抽象类的匿名子类02");
}
});
}
public static void method(XiaoQi xiaoQi){
xiaoQi.absMethod01();
xiaoQi.absMethod02();
}
}
abstract class XiaoQi{
//抽象方法
public abstract void absMethod01();
//抽象方法
public abstract void absMethod02();
//非抽象方法
public void noAbsMethod01(){
System.out.println("非抽象方法01");
}
}
输出内容:
1->抽象类的匿名子类01
1->抽象类的匿名子类02
++++++++++++++++++++++++++++++++++
2->抽象类的匿名子类02
2->抽象类的匿名子类02
2、接口
1、接口是一种规范,弥补了抽象类单继承的缺点;
2、接口抽取了几个类共有的一些行为特征,需要每个类去实现自己的行为特征,接口是一种非继承的关系;