修饰符abstract,可以修饰方法即抽象方法,也可以修饰类即抽象类。
抽象类的特点:
- 抽象类中可以没有抽象方法,抽象方法必须存在于抽象类中。(抽象方法只有方法名,没有方法实现)
- 抽象类的子类必须要重写抽象类的所有抽象方法
- 不能new抽象对象,只能靠子类去实现它
/抽象类
public abstract class Action {
//抽象方法,只有方法名,没有方法实现
public abstract void run();
//抽象类中可以有普通方法,但是抽象方法只能在抽象类中
public void go(){
System.out.println(" ");
}
}
//抽象类的子类必须要重写抽象类的所有抽象方法
public class A extends Action {
@Override
public void run() {
System.out.println("跑");
}
}
public class Demo01 {
public static void main(String[] args) {
Action a = new A();
a.run();
a.go();
}
}
注:
- 抽象类可以有构造方法,只是不能直接创建抽象类的实例对象而已。在继承了抽象类的子类中通过super()或super(参数列表)调用抽象类中的构造方法。
- 抽象类存在的意义:提高开发效率
声明接口的关键字interface。
接口与抽象类的区别:
- 抽象类:普通方法和抽象方法都可以有
- 接口:只有抽象方法(约束),约束和实现分离:面向接口编程~
//接口用关键字interface修饰
public interface userService {
//接口中的属性默认修饰符public static final,静态常量
int age = 18;
//接口中成员方法默认修饰符 public abstract,只能是抽象方法
void add(String name);
void delete(String name);
void modify(String name);
void query(String name);
}
public interface timeService {
void time();
}
//类实现接口用implements关键字
//接口的子类要么重写接口中的所有方法,要么子类也是抽象类
//类只能单继承,接口可以多实现
public class userServiceImpl implements userService ,timeService{
@Override
public void add(String name) {
}
@Override
public void delete(String name) {
}
@Override
public void modify(String name) {
}
@Override
public void query(String name) {
}
@Override
public void time() {
}
}
接口的作用:
1.接口本质是一种约束
2.定义一些方法,让不同的人实现
3.成员方法默认是public abstract
4.成员属性默认是public static final
5.接口不能被实例化【原因:接口中没有构造方法】
6.可以实现多个接口,但必须重写接口中的方法
- 类和类的关系:继承关系;只能单继承,可以多层继承
- 类和接口的关系:实现关系;可以单实现,也可以多实现
- 接口和接口的关系:继承关系;可以单继承,也可以多继承
-
成员区别:抽象类中可以有:常量、变量、构造方法、抽象方法、非抽象方法
接口中可以有:常量、抽象方法 -
关系区别:类与抽象类:继承
类与接口:实现 -
设计理念区别:抽象类:对类抽象,包括行为、属性
接口:对行为抽象,主要是行为



