抽象类(abstract class):使用了abstract关键字所修饰的类叫做抽象类。
为什么需要抽象类?如何定义抽象类?
是一种模板模式。抽象类为所有子类提供一个通用模板,子类可以再这个模板基础上进行扩展。 通过抽象类,可以避免子类设计的随意性。通过抽象类,我们可以做到严格限制子类的设计,使子类之间更加通用。
抽象类的定义和使用格式
在java定义抽象类时,要在关键字class前面加上关键字abstract。其具体格式如下:
abstract class 类名{
类体
}
抽象类通过继承的方式使用,一个子类只能继承一个抽象类(父类),在子类中必须实现抽象类中所有的抽象方法。具体的实现方式如下:
class 类名 extends 抽象类 {
//实现全部抽象方法
}
要点:
有抽象方法的类只能定义为抽象类抽象方法必须被子类实现。
抽象方法(abstract method):
使用abstract关键字所修饰的方法叫做抽象方法。抽象方法需要定义在抽象类中。相对于抽象方法,之前所定义的方法叫做具体方法(有声明,有实现)。
public abstract class Animal { //
String str;
public abstract void run(); //抽象方法的意义在于:将方法的设计和方法的实现分离
public void breathe(){
System.out.println("呼吸!");
run();
}
public Animal(){
System.out.println("创建一个动物对象!");
}
}
class Cat extends Animal{
@Override //Override表示重写父类的方法
public void run() {
System.out.println("跑跑!!");
}
}
接口(interface)
Java语言不支持一个类有多个直接的父类(多继承),但现实例子中,又有很多类似于多继承的例子,所以,在java中就用接口来填充这个空缺,java不可以多继承, 但可以实现(implements)多个接口,间接的实现了多继承。
为什么需要接口?
- 接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全面地专业地实现了:规范和具体实现的分离;
- 接口就是规范,定义的是一组规范,体现了现实世界中“如果你是...则必须能...”的思想。如果你是汽车,则必须能跑;
- 接口的本质是契约,就像我们人间的法律意义。制定好后大家都遵守。
- 项目的具体需求是多变的,我们必须以不变应万变才能从容开发,此处的“不变”就是“规范”。因此,我们开发项目旺旺都是面向接口编程!
接口中只有:常量、抽象方法
接口中常量默认修饰:public static final
接口中方法默认修饰:public / abstract
在使用接口过程中需要注意如下几个问题:
1、Interface中的所有方法访问权限自动被声明为public abstract。确切的说只能为public,当然你可以显示的声明为protected、private,但是编译会出错!
2、接口中可以定义“成员变量”,或者说是不可变的常量,因为接口中的“成员变量”会自动变为为public static final。可以通过类命名直接访问:ImplementClass.name。
3、接口中不存在具体实现的方法。
4、实现接口的非抽象类必须要实现该接口的所有方法。抽象类可以不用实现。
5、不能使用new操作符实例化一个接口,但可以声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。
6、在实现多接口的时候一定要避免方法名的重复。
public abstract class Demo {
abstract void method1();
void method2(){
//实现
}
}
使用接口来实现
interface Demo {
void method1();
void method2();
}
本文参考:http://www.cnblogs.com/dolphin0520/p/3811437.html
http://peiquan.blog.51cto.com/7518552/1271610
http://android.blog.51cto.com/268543/385282/
http://blog.csdn.net/xw13106209/article/details/6923556
http://dev.yesky.com/436/7581936.shtml
http://blog.csdn.net/chenssy/article/details/12858267