什么是抽象类?
抽象类,是普通类和接口之间的中庸之道---------Java编程思想
定义:包含抽象方法的类就是抽象类
作用:抽象类可以使类的抽象性明确起来,并告诉用户和编译器打算怎样来使用他们。
使用:比如狗类、猪类、猫类这三个类,具有一些共性,都可以吃和跑,那么我们可以将这一共性写入抽象类中,如下:
public abstract class animal {
public abstract void eat();
public abstract void run();
}
注意: 1 抽象类的限定词只能为public 或者protected,否则无法被继承,会出错
2 类中有抽象方法使,类也要写为abstract类
3 抽象方法只有方法体,没有实现
具体猫这个类,实现动物这个抽象类,重写其中的抽象方法:
public abstract class animal {
public abstract void eat();
public abstract void run();
}
class Cat extends animal{
@Override
public void eat() {
System.out.println("吃饭");
}
@Override
public void run() {
System.out.println("奔跑");
}
}
abstrcat关键字允许在类中创建一个或多个没有任何定义的方法,但没有提供任何具体的实现,这些实现是由类的继承者来创建的
什么是接口?
Interface使得抽象的概念更向前迈进了一步------Java编程思想
定义:接口,产生一个完全抽象的类,她允许创建者确定方法名,参数列表和返回类型,但是没有方法体,接口只提供了形式。
作用:接口用来建立类与类之间的协议。所有实现了特定接口的类,看起来应该都是这样。
使用:
定义接口
interface animal{
void eat();
void run();
}
接口的方法默认是public
实现接口:
class Dog implements animal1{
@Override
public void eat() {
System.out.println("狗吃饭");
}
@Override
public void run() {
System.out.println("狗奔跑");
}
}
接口和抽象类的区别
- 抽象类用abstract关键字,接口用interface关键字
- 抽象类的子类用extends关键字继承,接口用implement实现
- 抽象类可以包含非抽象方法,接口只能包含抽象方法
(jdk1.8中,接口可以有static方法和default方法,即接口中可以有具体的实现) - 类只能继承一个抽象类,类可以实现多个接口,接口相当于实现了java的多重继承
- 抽象类中的方法可以是public和protected,而接口中的方法只能是public
- 接口更多的是在系统架构上发挥作用,主要用于定义模块之间的通信契约。而抽象类,在代码实现方面发挥作用,可以实现代码的复用。
- 总的来说,接口是对抽象类的一种抽象
面试题:如果new一个抽象类会怎么样?
抽象类只能被子类化,不能被实例化。
如果这个抽象类有子类,那么子类会override抽象类的抽象方法,那么通过new这个抽象类来生成一个实例,实际上生成的是这个子类的实例对象。
如果抽象类没有子类,就是抽象方法没有被实现,那么new这个抽象类会报错。