概述
用于描述一个模糊的特征。有时一个类中的一些方法细节不确定,我们就可以用抽象的概念去定义。
定义格式
使用abstract关键字修饰
//定义抽象类Person
abstract class Person {
//定义抽象方法sleep
abstract void sleep();
}
抽象方法定义注意事项
- 抽象方法没有方法体,定义时没有"{}",小括号后直接跟";"。
- 一个类中含有抽象方法,该类必须为抽象类。
- 抽象类中可以不定义任何抽象方法。
抽象类和普通类的区别:
- 抽象类必须使用public修饰(如果被final、private修饰,子类无法继承,也就无法实现抽象方法)。
- 抽象类默认权限修饰符为public。
- 抽象类不可以使用new关键字创建对象,但子类创建对象时,抽象父类也会被JVM实例化。
- 抽象父类的子类,必须重写所有抽象方法。如果抽象类的子类含有未实现的抽象方法,子类也必须为抽象类。
- 抽象类也可以有构造方法,与普通父类一样,当子类实例化时被调用。
用代码展示一个例子:
创建抽象类,包含一个抽象方法和普通方法。
abstract class Person {
public abstract void sleep();
public void eat(){
System.out.println("要吃饭...");
}
}
创建类继承抽象类,抽象类中的非抽象方法可以不重写。
public class Student extends Person{
String name;
public Student(){}
public Student(String name){
this.name = name;
}
public void sleep(){
System.out.println(name+"要睡觉..");
}//注意,抽象类的子类必须重写抽象类中的抽象方法
}
抽象类不能被实例化,要想调用抽象类中的方法必须创建抽象类的子类。
程序入口代码如下:
public static void main(String[] args) {
Student stu1 = new Student("熊大");
stu1.eat();
stu1.sleep();
}
运行结果如下:
要吃饭...
熊大要睡觉..
可以看出,通过实例化子类,子类对象可以直接调用抽象父类的普通方法,也可以调用抽象父类中重写的抽象方法。