抽象类(abstract)
指在普通类的结构里面增加抽象方法的组成部分;即一个父类设计得非常抽象,以至于它都没有任何具体的实例。这样的的类称为抽象类。抽象类要使用abstract关键字声明。
实例:
public abstract class Action{
public abstract void doing();//抽象类型方法,无方法体
public void test(){
};//普通方法
}
class son extends Acticon{
@Override
public void doing(){
System.out.println("doing");
}
}
使用限制:
1. 由于抽象类里会存在一些属性,那么抽象类中一定存在构造方法,其存在目的是为了属性的初始化。并且子类对象实例化的时候,满足先执行父类构造,之后再执行子类构造的顺序。
2.抽象类不可以用final声明,因为final定义的类不能又子类,而抽象类必须有子类。
3.外部抽象类不允许使用static声明,而内部的抽象类运行使用static声明。使用static声明的内部抽象类相当于一个外部抽象类,继承的时候使用“外部类.内部类”的形式表示类名称。
4.抽象类不能使用new操作符来初始化。但仍然可以定义它的构造方法,其构造方法在它的子类的构造方法中调用。
4.所有的子类如果要想正常的完成操作,必须按照指定的方法进行覆写才可以,而这个时候抽象类所起的功能就是一个类定义模板的功能。
接口(interface)
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。接口被看着一种特殊的类,每个接口都被编译为独立的字节码文件。
与抽象类相似,可以使用接口作为引用变量数据类型或类型转换的结果;不能使用new操作符创建接口实例。一个接口就是描述一种能力。接口的作用就是告诉类其要实现接口代表的功能。
实例:
public interface UserDao{
public static final int age=33;
public abstract void doing();
public abstract int insert(A a);
}
public class UserTest implements UserDao{
public void doing(){
System.out.println("doing");
}
public void insert(A a){
System.out.println("xingzheng");
}
}
使用限制:
1.接口中所有定义的方法中其实都是抽象的public abstract
2.变量只能为public static final类型的
抽象与接口的区别:
1. 抽象类要被子类继承,接口要被子类实现;
2. 抽象类中可为普通变量,而接口中变量全部为公共静态变量
3. 抽象类中可以有方法的实现(但不可以实例化),接口中全部为方法的声明,
4. 抽象类中可以有构造函数,接口中不可以有构造函数,
5. 抽象类必须被单继承,而接口可以多实现(一个类可以实现不止一个接口)
6. 抽象类可以有非抽象方法,而接口中方法全部为抽象方法。