抽象类:
abstract修饰符:
abstract修饰的类为抽象类,此类不能有对象;(无法对此类进行实例化)
abstract修饰的方法为抽象方法,此方法不能有方法体
抽象类的使用特点:
抽相类不能有对象,(不能用 new 此关键字来创建抽象类的对象);
有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法;
抽象类的抽象方法必须在子类中被重写
接口:
接口中的所有属性修饰符默认为:public static final
接口中的所有方法修饰符默认为:public abstract
抽象类和接口的区别:
1.抽象类描述的是“是不是”的问题,而接口描述的是“有没有”的问题;
2.在java中类的继承是“单继承”,可以“多对一”,但是不允许“一对多”。而一个类可以同时实现多个接口
**
概念:
抽象类:包含抽象方法的类就是抽象类
接口:指抽象方法的集合,方法不包含方法体
相同点:
1.都不能被实例化
2.接口的实现类或者抽象类的子类都必须实现了接口或抽象类中的方法后才可以被实例化
不同点:
1.接口只有定义,方法不能在接口中实现,实现接口的类要实现接口中所有的方法;抽象类可以有定义与实现,方法可以在抽象类中实现
2.接口要实现,抽象类要继承,一个类可以实现多个接口,但只能继承一个抽象类
3.接口强调设计理念为“has - a”的关系,抽象类强调“is - a”的关系
4.接口中定义变量默认为public static final,而且要赋初值,方法必须是public,static,而且只能是这两个;抽象类中可以有自己的数据成员变量,也可以有非抽象方法的成员方法,而且成员变量默认为default。这些成员变量可以在子类中被重新定义,也可以重新赋值,抽象方法(有abstract修饰)不能用private、static、synchronized、native等访问修饰符修饰,同时方法以分号结尾,并且不带花括号
5.接口被运用与比较常用的功能,便于日后的维护或者添加删除方法;而抽象类更倾向于充当公共类的角色,不适用于对立面的代码进行修改
另外:
接口时一种特殊形式的抽象类,使用接口完全有可能实现与抽象类相同的才做。当子类和父类之间存在有逻辑上的层次结构时,推荐使用抽象类;当用于不同类之间,定义不同类之间的通信规则,希望支持差别较大的两个或者更多对象之间的特定交互行为时,应该使用接口。此外,接口可以继承接口,抽象类可以实现接口,抽象类也可以继承具体类。抽象类也可以有静态的main方法。