抽象类与接口
抽象类
加了abstract就是抽象类了,既然是类就是单继承
- 不能new这个抽象类,只能靠子类实现它:约束
- 抽象类里可以写普通类
- 抽象方法必须写在抽象类中
抽象类就是抽象的抽象:即约束
思考题?
- 既然他不能new对象,那么他存在构造器吗? 有构造器
- 抽象类存在的意义是什么? 方便重写(他会要求你必须重写),提高开发效率
package OOP02.Demon7;
//abstrac 抽象类
public abstract class Action{
//抽象类的构造方法
public Action() {
}
//约束 有人帮我么实现,现在方法体可以不写
//abstra 抽象方法,只有抽象的名字,没有方法的实现
public abstract void doSomething();
}
package OOP02.Demon7;
//Ninja继承与抽象类的父类Action需要重写父类的所有方法
//除非子类自身也是一个抽象类,则不需要重写,而留给子类的子类重写
public class Ninja extends Action{
@Override
public void doSomething() {
}
}
接口
普通类:只有具体的实现
抽象类:具体的方法和规范(抽象方法)都有
接口:只有规范自己无法写方法 ——专业的约束,约束与实现的分离:面向接口的编程。
接口就是规范,定义的是一组规则,体现了现实世界中“如果你是什么,则必须能什么”的思想
接口的本质是契约,就像法律,制定好后大家都遵守
声明接口的关键字是interface
接口中的所有方法的定义其实都是抽象的 public abstract关键字是默认的,可以不加
package OOP02.Demon8;
//接口都需要有实现类
public interface UserService {
//接口中的所有方法的定义其实都是抽象的 public abstract
void add(String name);
void delete(String name);
void updata(String name);
void query();
public abstract void fun();
}
接口都需要有实现类:
实现类关键词implement
public class UserServiceImpl implements UserService
标准的实现类的声明方法↑
package OOP02.Demon8;
//实现类的标准的命名规则 实现类关键词implement
//xxImpl类名 实现 xx接口
public class UserServiceImpl implements UserService{
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void updata(String name) {
}
@Override
public void query() {
}
@Override
public void fun() {
}
}
实现类需要重写接口中的所有方法(实现它)
利用接口实现多继承:
实现类UserServiceImpl,可以实现多个接口(与父子继承的单继承不同),实现的接口在声明中使用逗号隔开。和之前说的一样,接口的所有方法都需要在实现类中重写,否则报错。
可以通过接口定义一个系统
接口总结
作用
- 约束
- 定义一些方法,让不同的(打工)人实现
- 方法是public abstract的
- 属性是public static final的
- 接口不能被实例化,接口中没有构造方法,只能被实现类实现
- implement可以实现多个接口
- 必须重写接口中的方法
浙公网安备 33010602011771号