抽象类与接口的比较
抽象类: 如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。比如new Animal(),我们都知道这个是产生一个动物Animal对象,但是这个Animal具体长成什么样子我们并不知道,它没有一个具体动物的概念,所以他就是一个抽象类,需要一个具体的动物,如狗、猫来对它进行特定的描述,我们才知道它长成啥样。所以抽象类我们可以理解为是某一个类实事物抽取出来都具有的特征。
再使用抽象类时需要注意的几点:
1、 定义抽象类时要用关键字abstract;如:
Public abstract Animal{}
2、 抽象类不能被实例化,因为它是某些事物共有的特征,并不代表某种类,所以不能被实例化(不知道这么理解对不对),因此必须由子类来完成。
3、 抽象类中可以有实体方法,也可以有抽象方法(也可以没有)。
4、 抽象类之间可以继承(一样必须是单继承)。
5、 含有抽象方法的类必须是抽象类。
6、 子类中的抽象方法不能与父类的抽象方法同名。
7、 abstract不能与final并列修饰同一个类。
8、 abstract 不能与private、static、final或native并列修饰同一个方法 。
9、 抽象方法必须由子类来进行重写
abstract public class People {
abstract public void eat();
abstract public void walk();
}
public class Man extends People {
@Override
public void eat() {
System.out.println("Man eat");
}
@Override
public void walk() {
System.out.println("Man walk");
}
}
public class Women extends People {
@Override
public void eat() {
System.out.println("women eat");
}
@Override
public void walk() {
System.out.println("women walk");
}
}
接口:接口是比抽象类更加抽象的“类”,但是接口不是对类特征进行抽象出来,而是实现这个类的某个功能。
接口注意点:
1、 接口的关键是为implements。
2、 一个类可是实现多个接口。
3、 接口之间可以继承并且可以多继承。
4、 接口中只能有抽象方法。
public interface Fly {
int i=1; //变量必须初始化,并在变量前默认添加public static final<strong></strong>
public static final int j=0; //相当int j=0;
abstract void fly();
}
public interface Run extends Fly{
public static final int i=1;
abstract void run();
}
public class Test implements Run{
@Override
public void run() {
}
@Override
public void fly() {
}
}
接口和抽象类的关系如图