抽象类:用abstract修饰,抽象类中可以没有抽象方法,但抽象方法肯定在抽象类中,且抽象方法定义时不能有方法体;抽象类不可以实例化只能通过继承在子类中实现其所有的抽象方法;抽象类如果不被继承就没有任何意义;抽象类为子类定义了一个公共类型,封装了子类中的重复内容。 接口:同Interface关键字定义接口,是特殊的抽象类因为类中只包含抽象方法;接口中不能定义成员变量可以定义常量;接口是其通过其他类使用implements关键字定义实现类,一个类一旦实现接口就必须实现其中的所有抽象方法,一个类可以实现多个接口,接口名之间用逗号隔开即可;一个接口可以通过extends关键字继承另一个接口,与此同时继承了父类中的所有方法。
抽象类:
1、用 abstract 修饰,抽象类中可以没有抽象方法,但抽象方法肯定在抽象类中,且抽象方法定义时不能有方法体;
2、抽象类不可以实例化只能通过继承在子类中实现其所有的抽象方法;
3、抽象类如果不被继承就没有任何意义;
4、抽象类为子类定义了一个公共类型,封装了子类中的重复内容。
接口:
1、用Interface关键字定义接口,是特殊的抽象类,因为类中只包含抽象方法;
2、接口中不能定义成员变量可以定义常量;
3、 接口是其通过其他类使用 implements 关键字定义实现类,一个类一旦实现接口就必须实现其中的所有抽象方法,一个类可以实现多个接口,接口名之间用逗号隔开即可;
4、一个接口可以通过 extends 关键字继承另一个接口,与此同时继承了父类中的所有方法。
BD如果表述为: 不能为全部的抽象方法提供任何实现细节或方法体时,就好理解了。
此处举一个选项的例子:
package com.learn.pra10;
/**
* 接口,含有2个抽象方法。
* @author mengyi
*
*/
public interface Test {
void speak();
void print();
}
package com.learn.pra10;
/**
* Demo1实现接口Test,但是这里只实现了speak方法,
* 并没有实现print方法,所以此类必须声明为抽象类,要不编译器报错。
* @author mengyi
*
*/
public abstract class Demo1 implements Test {
public void speak(){
System.out.println("speak方法已实现");
}
}