基础篇——抽象类和接口的区别
写代码的四点:
1.明确需求。要做什么?
2.分析思路。要怎么做?(1,2,3……)
3.确定步骤。每一个思路要用到哪些语句、方法和对象。
4.代码实现。用具体的语言代码将思路实现出来。
学习新技术的四点:
1.该技术是什么?
2.该技术有什么特点?(使用需注意的方面)
3.该技术怎么使用?(写Demo)
4.该技术什么时候用?(在Project中的使用场景 )
----------------------早计划,早准备,早完成。------------------------
抽象类
在面向对象的概念中,所有的对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描述对象的,如果一个类中没有包含足够的信息来描述一个具体的对象,这样的类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法、构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能使用。子类用extends来继承抽象类,如果子类不是抽象类,则子类必须实现抽象类中的所有抽象方法,也可以实现抽象类中的非抽象方法。
抽象类中可以没有抽象方法,但是如果一个类里有抽象方法,那么这个类只能是抽象类。
/**
* 水果的抽象类
*/
public abstract class FruitsAbstractActivity {
//声明变量
public static final int num = 10;
public static int max = 10;
//抽象方法
public abstract void eat() throws Exception;
//非抽象方法
public static void gift(){
LogUtil.e("TAG", "水果当作礼物");
}
}
接口(interface)
在Java编程语言中是一个抽象类型,是抽象方法的集合,通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。解决了单继承的局限性问题。
接口并不是类,类描述对象的属性和方法,接口则包含类要实现的方法。除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则必须声明为抽象类。
用interface关键字声明一个接口:
//文件名称:Fruits.java
public interface Fruits {
//声明变量
public static final int num = 10;
//抽象方法
public abstract void eat() throws Exception;
public abstract void gift();
}
接口和抽象类的区别:
1.接口中不能有构造函数,而抽象类中可以有构造函数;
2.接口中的方法不能有方法体,而抽象类中的方法可以有方法体;
3.接口中的成员变量只能是public static final类型的,而抽象类中的成员变量可以是
各种类型的;
4.接口中的方法全都是public abstract的方法,如果省略修饰符,则默认的
也是public abstract修饰,抽象类中的方法可以被public、protected等修饰符修饰。
5.接口中不能包含静态代码块和静态方法,而抽象类可以包含静态代码块和静态方法;
6.一个类可以实现多个接口,而一个类只能继承一个抽象类;
7.抽象类和接口都不能直接实例化,如果要实例化,抽象类变量必须指向实现所有抽象方法的子类对象,
接口变量必须指向实现所有接口方法的类的对象。
抽象类和接口的使用:
接口主要用于模块与模块之间的调用,Java不支持多继承,使用接口避免了单继承的局限性。
抽象类主要用于当做基础类使用,即基类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类,比较麻烦。