抽象类:定义一个类的目的,不是为了创建自身对象,而是为了提供一个公共的接口,那么可以把相应的成员函数定义为抽象函数。
//显然,在Animal类中bark()方法无法具体实现,而在子类中继承了bark()方法并具体地重写了该方法去实现。
//即父类中的bark()方法去实现是没有任何意义的,该方法只能在子类根据具体情况去实现。public class Animal {
public void bark() {} }
上面的语法和用法是允许这样,但一般这种情况还是把它抽象成abstract方法。
// 这种情况可以将父类声明为抽象类。抽象类需要用abstract修饰符修饰
public abstract class Animal {
public abstract void bark() ; //抽象方法没有方法体,因为本身为不能实现的方法。
public void say(){
System.out.println("抽象类中的普通方法!");
} }
1.抽象类不能创建对象,即不能实例化,new Animal()(X)。
2.抽象类中包含抽象方法和普通的成员方法和成员变量。但不同的是:抽象类中的抽象方法只能用public或protected修饰。因为抽象类的目的是让其子类继承重写。
3.若一个类继承了一个抽象类,那么子类必须实现父类的抽象方法。否则,子类继承的方法还是 抽象方法,子类也是抽象类了,要用abstract修饰。
public class BirdextendsAnimal {
public void bark() {
System.out.println("叽叽喳喳~~"); //具体的方法实现
} }
接口(Interface)——抽象类型,是抽象方法的集合。接口通常以Interface来声明,一个类通过继承接口的方式,从而继承接口的抽象方法。
1.类是描述对象的属性和方法,而接口则包含类要实现的方法。
2.实现接口的类是抽象类,否则该类要定义接口中的所有方法。
3.接口所有的方法中都是抽象方法,不能被实例化,但可以被实现。
public interface USB {
public void install(); //已默认为抽象方法,可以不写abstract修饰符.
public void work();
}
接口继承形式: class ClassName implements Interface 1,Interface 2,[...]{} ,可以多重继承。
//必须实现接口所有抽象的方法,或者成为抽象类
public class Phone implements USB {
public void install() {
System.out.println("为手机安装USB驱动!");
}
public void work() {
System.out.println("通过USB接口,来给手机传递数据!");
} }
public class Print implements USB {
public void install() {
System.out.println("为打印机安装USB驱动!");
}
public void work() {
System.out.println("打印机可以通过USB接口来打印文档!");
} }
public class Computer {
public void plugin(USB usb) {
usb.install();
usb.work();
//表面上调用的是接口里的抽象方法,实际上调用的是“子类”实现的具体的方法。
} }