在java中可以创建一种类专门用来做父类,这种类称为“抽象类”。抽象类实际上也是一个类,只是与之前的普通类相比,内部新增了抽象方法。
抽象类的基本概念
抽象方法是只声明而未实现的方法,所有的抽象方法必须使用abstract关键字声明,包含抽象方法的类也必须使用abstract class声明。
抽象类定义规则如下:
(1)抽象类和抽象方法都必须用abstract关键字来修饰;
(2)抽象类不能直接实例化,也就是说不能用new关键字去产生对象;
(3)抽象类定义时抽象方法只需声明,而不需实现;
(4)含有抽象方法的类必须被声明为抽象类,抽象类的子类必须实现所有的抽象方法后才能被实例化,否则这个子类还是个抽象类。
如果一个类可以实例化对象,那么这个对象可以调用类中的属性或者是方法,但是抽象类中存在抽象类方法,而抽象方法没有方法体,没有方法体的方法无法使用。
所以,对于抽象类的使用原则如下。
抽象类必须有子类,子类使用extends继承抽象类,一个子类只能够继承一个抽象类;
子类(如果不是抽象类)则必须实现抽象类之中的全部抽象方法;
如果想要实例化抽象类的对象,则可以使用子类进行对象的向上转型来完成。
抽象类的用法:
abstract class Person
{
String name;
int age;
String occupation;
public abstract String talk();
}
class Student extends Person
{
public Student(String name,int age,String occupation)
{
this.name=name;
this.age=age;
this.occupation=occupation;
}
public String talk()
{
return"学生——>姓名:"+this.name+",年龄:"+this.age+",职业:"+this.occupation+"! ";
}
}
class Worker extends Person
{
public Worker(String name,int age,String occupation)
{
this.name=name;
this.age=age;
this.occupation=occupation;
}
public String talk()
{
return "工人——>姓名:"+this.name+",年龄:"+this.age+",职业:"+this.occupation+"!";
}
}
public class AbstractClassDemo
{
public static void main(String[] args) {
Student s=new Student("张三",20,"学生");
Worker w=new Worker("李四",30,"工人");
System.out.println(s.talk());
System.out.println(w.talk());
}