抽象类的定义与使用
1.抽象类:在普通方法的基础上,扩充了一些抽象方法(也有java单继承局限)。
抽象方法:只声明而未实现的方法,即没有方法体。
所有抽象方法要求使用abstract来定义,并且抽象方法所在类也一定要使用abstract来定义,表示抽象类。
在java中,只有方法声明而没有方法体的,不一定是抽象方法,也可能是本地方法,如:public native void fun( );
2.抽象类的使用原则
(1)所有的抽象类必须有子类(abstract不能与final一起使用,也不能与private一起使用)。
(2)抽象类的子类必须覆写抽象类的所有抽象方法(该子类若也是抽象类,则不用覆写所有的抽象方法)。
(3)抽象类要想创建实例化对象,必须通过子类的向上转型为其实例化对象(抽象类无法直接创建实例化对象)。
3.抽象类的相关规定
(1)抽象类也允许提供构造方法,并且子类也照样遵循对象实例化流程,先调用父类构造方法,而后调用子类构造方法。
(2)抽象类中允许不定义任何的抽象方法,但此时抽象类依然无法直接创建实例化对象。
(3)abstract与final不能一起使用,也不能与private一起使用。
因为final一定没有子类,abstract一定要有子类;private一定不能被覆写,abstract一定要被覆写。
4.内部抽象类
子类只需要覆写父类的直接抽象方法,父类内部抽象类的抽象方法不用管(可以在子类的内部类中实现)。
//抽象类
abstract class Person{
private String name;
private int age;
public static String country;
public Person(){
System.out.println("Person..................");
}
public static void fun(){
System.out.println("Hello");
}
//抽象方法
public abstract void eat();
public abstract void work();
//内部抽象类
public abstract class A{
public abstract void test();
}
}
abstract class Student extends Person{
public void eat(){
System.out.println("student is eating.");
}
}
class Worker extends Person{
public Worker(){
System.out.println("Woeker...............");
}
public void eat(){
System.out.println("worker is eating.");
}
public void work(){
System.out.println("worker is working.");
}
//实现内部抽象类的抽象方法
class B extends A{
public void test(){
System.out.println("内部抽象类");
}
}
}
public class Test4{
public static void main(String[] args){
//通过子类实例化抽象类父类对象
Person per = new Worker();
per.eat();
}
}
输出结果为:
Person..................
Woeker...............
worker is eating.