Java抽象类
抽象类产生的原因
有些类中我们无法完整地进行描述,因此需要抽象
抽象类的声明
abstract class 类名{ // 抽象类
}
抽象方法
只声明而未实现的方法称为抽象方法(未实现指的是:没有“{}”方法体),抽象方法必须使用abstract关
键字声明。
abstract class 类名{ // 抽象类
public abstract void 方法名() ; // 抽象方法,只声明而未实现
}
抽象类的规范
在抽象类的使用中有几个原则:
-
抽象类本身是不能直接进行实例化操作的,即:不能直接使用关键字new完成。
-
一个抽象类必须被子类所继承,被继承的子类(如果不是抽象类)则必须覆写(重写)抽象类中的全
部抽象方法。例如:定义一个抽象类:
public abstract class People { abstract void say(); }
直接定义类继承会报错:
public class Student extends People{ }
应该改为抽象类继承或实现抽象类的全部抽象方法:
//方式1 public abstract class Student extends People{ } //方式2 public class Student extends People{ void say() { } }
-
抽象类不能使用final声明,因为抽象类必须有子类实现抽象方法才有意义。
-
抽象类可以有构造方法,子类对象实例化的时候的流程与普通类的继承是一样的,都是要先调用父类中的
构造方法(默认是无参的),之后再调用子类自己的构造方法。
抽象类与普通类的不同点
- 抽象类必须用public或procted 修饰(如果为private修饰,那么子类则无法继承,也就无法实现其
抽象方法)。默认缺省为 public。 - 抽象类不可以使用new关键字创建对象, 但是在子类创建对象时, 抽象父类也会被JVM实例化。
- 如果一个子类继承抽象类,那么必须实现其所有的抽象方法。如果有未实现的抽象方法,那么子类也必
须定义为 abstract类
eclipse中使用向导快速创建抽象类
首先定义一个抽象类People:
package Demo;
public abstract class People {
abstract void say();
}
通过以上操作,就自动生成了一个新的类Student,并重写了抽象父类的所有抽象方法:
package Demo;
public class student extends People {
@Override
void say() {
// TODO Auto-generated method stub
}
}
@Override标识
此标识用于检查标记下面的方法是否重写了抽象类,如果方法名称写错了就会报错