对比项 | 抽象 | 接口 |
---|---|---|
是否含有构造器 | 有 | 无 |
是否可被实例化 | 无 | 无 |
定义关键词 | abstract | Interface |
实现关键词 | extends | implements |
是否可被多继承或实现 | 单继承 | 多实现 |
是否需要实现父类所有的方法 | 是 | 是 |
是否存在常量 | 是 | 是 |
是否存在普通方法 | 是 | 否 |
Action 类为抽象类,ActionExtends 类为抽象类的实现类
package com.oop.demo07;
// 普通类:具体实现 抽象类:具体实现和规范(抽象方法)有构造方法但是不能new 接口:只有规范 无构造方法
// 抽象类 abstract
// 抽象单继承 接口多继承
// 抽象类不能new,只能继承
// 抽象方法必须写在抽象类中 抽象类中可以存在普通方法
// 无构造方法
public abstract class Action {
public abstract void doSomething();
public void doSomething1(){
System.out.println("抽象类非抽象方法");
};
}
package com.oop.demo07;
public class ActionExtends extends Action{
@Override
public void doSomething() {
System.out.println("重写的抽象方法");
}
public static void main(String[] args) {
ActionExtends actionExtends = new ActionExtends();
actionExtends.doSomething();
actionExtends.doSomething1();
}
}
UserService 类与TimeService类为接口,UserServiceImpl类为实现类
package com.oop.demo08;
public interface TimeService {
void timerr();
}
package com.oop.demo08;
public interface UserService {
// 方法默认前缀public abstract
void run();
// 属性默认前缀 public static final
String name = "xxx";
}
package com.oop.demo08;
// 接口 关键词 implements
// 必须实现接口中所有方法
// 可以实现多个接口
// 无构造函数 不可被实例化
public class UserServiceImpl implements UserService,TimeService{
@Override
public void timerr() {
}
@Override
public void run() {
}
}