一、抽象类的基本概念
抽象类是一种专门用来当做父类的类,其作用类似于“模板”,其目的是要设计者依据它的格式来修改并创建新的类。
但是并不能直接由抽象类创建对象,只能通过抽象类派生出新的类,再由它来创建对象
二、抽象类的使用规则
1、包含一个抽象方法的类必须是抽象类
2、抽象类和抽象方法都要用abstract关键字声明
3、抽象方法只需要声明不需要实现
4、抽象类必须被子继承,子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法
三、抽象类的定义格式
abstract class 抽象类名称{
属性;
访问权限 返回值类型 方法名称(参数){ //普通方法
【return 返回值】;
}
访问权限 abstract 返回值类型 方法名称(参数); //抽象方法,在抽象方法中是没有方法体的
}
四、示例
package lkp;
class Person{
public static final String NATION = "CHINA";//定义一个全局的常量
private String name = "lkp";
public String getName(){//取得姓名
return name;
}
public void setName(String name){//设置姓名
this.name = name;
}
public abstract void print();//定义抽象方法,在抽象方法中是没有方法体的
}
//继承抽象类,若子类不是抽象类,则覆写抽象父类中的全部方法
class Print extends Person{
public void print(){//覆写
System.out.println("国籍:" + NATION + "\n" + "姓名:" + super.getName());
}
}
class Test{
public static void main(String args []){
Print pri = new Print();//实例化子类对象
pri.print();//调用被子类覆盖过的方法
}
}
五、注意问题
1、一个抽象类是不可以用final关键字声明的。因为一个类要是被final关键字声明,则此类是不能被子类所覆写的。而抽象类又必须被子类覆写,
所以抽象类是不可以用final关键字声明的。
2、抽象方法不能使用private声明。因为抽象方法必须被子类所覆写,如果声明为private,则子类是无法被覆写的
六、抽象类中是可以定义构造方法的
1、子类可以通过super调用抽象类中的构造方法。示例如下:
package lkp;
abstract class A{
public A(){
System.out.println("抽象类中的构造方法");
}
}
class B extends A{
public B(){
super();//调用了抽象类的构造方法,此语句可以不写
System.out.println("子类中的构造方法");
}
}
class Test{
public static void main(String args []){
B b = new B();
}
}
2、可以直接在子类指定调用父类中的指定参数的构造方法
package lkp;
abstract class Person{//定义一个抽象类
private String name;
private int age;
public Person(String name,int age){//在抽象类中定义构造方法
this.setName(name);
this.setAge(age);
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public abstract String getInfo(); //定义一个抽象方法
}
class Student extends Person{
private String school;
public Student(String name,int age,String school){
super(name, age);
this.setSchool(school);
}
public String getSchool(){
return school;
}
public void setSchool(String school){
this.school = school;
}
public String getInfo(){
return "姓名" + super.getName() +"\n"+
"年龄" + super.getAge() + "\n"+
"学校" +this.getSchool();
}
}
class Test{
public static void main(String args[]){
Student stu = new Student("lkp",23,"uestc");
System.out.println(stu.getInfo());
}
}