什么是抽象函数?
只有函数的定义,没有函数体的函数被称为抽象函数。
abstract void fun();
什么是抽象类?
使用abstract定义的类被称之为抽象类;
1、抽象类不能够生成对象
2、如果一个类当中包含有抽象函数,那么这个类必须被声明为抽象类
3、如果一个类当中没有抽象函数,那么这个类也可以被声明为抽象类
抽象类是用来做父类的,无法直接生成实例!!
abstract class Person{
String name;
int age;
void introduce(){
System.out.println("" + name + age);
}
adstract void eat();
}
当子类继承了抽象的父类时,一定要复写父类的抽象函数。
class Chinese extends Person{
void eat(){
System.out.println("用筷子吃饭");
}
}
如果我们定义了一个类,不想去让这个类生成对象时,我们可以把这个类定义成一个抽象类,即使类里没有抽象函数。
抽象类可以有构造函数吗?
答:可以有构造函数。
子类的构造函数中,系统会默认调用父类的构造函数(如果没有显示的调用),就是super( ); 当然也可以在子类的构造函数中显示使用super加参数显示调用父类的构造函数。
为什么要使用抽象类?
使用抽象类的必要性之一。
class Printer{
void open(){
System.out.println("open");
}
void close(){
System.out.println("close");
}
void print(){ }
}
//该打印机为喷墨打印机
class HPPrinter extends Printer{
void print(){
System.out.println("使用喷墨打印");
}
}
//该打印机为针式打印机
class CannonPrinter extends Printer{
void print(){
System.out.println("使用针式打印");
}
}
class Test{
public static void main(String args []){
Printer p1 = new HPPrinter();
p1.open();
p1.print();
p1.close();
}
}
上面的例子中存在一个问题:如果继承printer类后,忘记去复写print函数,程序也是可以运行的,但结果不对。
所以我们把printer中的print写成抽象函数后,就不可能是忘记复写,不复写程序不会编译通过。
//现代编程理论:
//如果一段代码在语意上是有错误的,那么在语法上也应该是有错误的
abstract class Printer{
void open(){
System.out.println("open");
}
void close(){
System.out.println("close");
}
abstract void print(){ }
}