抽象类与接口
抽象类,抽象方法
使用abstract来定义抽象类,抽象类就是约束的作用,也不能产生对象实例,抽象类除了被继承之外,本身没有任何意义。一个抽象类可以不包含方法,也可以存在抽象方法和普通的方法。但抽象方法只能存在于抽象类中,抽象方法就是使用abstract创建的方法,这个方法没有方法体,以分号结尾,本身没有任何意义,只能被继承的子类重写。而继承这个抽象类的子类必须重写这个抽象类中的抽象方法。除非这个子类也是一个抽象类,那就交又他的子子类完成重写。
抽象类:
package oop.Demo06;
public abstract class Action {//使用abstract定义抽象方法
public abstract void a();//抽象方法,没有方法体
}
子类:
package oop.Demo06;
public class A extends Action{//继承抽象类Action,必须重写父类的抽象类
接口
接口更像是一个升级版的"抽象类",接口中所有方法都只能是抽象方法,属性为常量(一般不会出现属性)。一个类可以同时实现多个接口,所以侧面实现了多继承的概念。和抽象类相同的是,接口也不能产生对象实例,不能被实例化,因为接口不是类,所以没有构造方法。
使用interface关键字来替换类中的class关键字,就能把这个类换成一个接口。在接口中,只能定义抽象方法,方法默认是public abstract的。 而一个类,可以同时实现多个接口,实现伪多继承。在类名后面使用implements关键字连接 接口名,需要多个接口时,用逗号隔开接口名即可。但类必须重写每个接口内的所有方法,这就让接口起到了一个约束的作用。
接口的定义和多继承形式:
接口1
package oop.Demo07;
public interface UserService {//定义一个接口1
//接口中所有方法都是抽象的
void add(String name);//增
void delete(String name);//删
void update(String name);//改
void query(String name);//查
}
接口2
package oop.Demo07;
public interface TimeService {//定义一个接口2
void time();
}
创建一个类实现多个接口
package oop.Demo07;
//类通过implements实现接口,实现接口必须重写接口内的所有抽象类
//一个类可以同时实现两个接口,实现了多继承
public class UserServiceImpl implements UserService,TimeService{