抽象类
上篇文章,我们提到类就是一类具有相同属性或者方法的对象的抽象。那么抽象类是什么呢?
比如:假设大学生和小学生这两个类都是从学生类继承而来的,大学生类和小学生类中的属性和方法都是具体的。大学生有名字、性别等属性,有学习,玩等方法。小学生也有姓名,性别,学习和玩。那么在他们的父类学生类中,也应该有学习和玩这两个方法。
但是,假设大学生和小学生玩的方法是一样的,学习的方法是不一样的,那学生类中学习的方法该如何实现呢?
按上篇文章的思路,我们可以先在学生类中随便写。之后在大学生类中和小学生类中重写这个方法,就可以了。这样就很麻烦,如果父类中有100个这样的方法,那我们就要写100个实现,就算是随便写,也很多。因此,就诞生了抽象类这个概念,抽象类,就是类中的方法没有实现,只定义方法,把方法体交给子类去实现。但是这样有一个缺点,就是抽象类是不能定义对象的,所以如果这个父类需要定义对象的话,就只能采用方法重写的方式了。
附:抽象类的定义方式
public absract class 抽象类名 {
//类属性
……
//类方法
public study();//只定义不实现
public play(){//实现
System.out.printf("I am playing!");
}
}
接口
有了抽象类的概念,接口就很好理解了,接口就是所有的方法都是只定义不实现的,而且没有类属性,只有类常量。可以说是一个高度抽象的类,但是它的定义方法和抽象类不同。然后,如果类要继承接口的话,就要把接口中定义的所有方法实现,如果是抽象类就可以不必全部实现。接口之间可以继承。
//接口的定义
public interface 接口名{
//类常量
...
//类方法
public study();
public play();
}
//接口之间的继承
public interface 接口名1 extended 接口名{
//增加的类常量
...
//增加的类方法
...
}
//类和接口之间的继承
public (absract)class 类名 implement 接口名{
//增加本类的方法和属性
...
//实现接口定义的方法
...
}