一、抽象类
抽象类(Abstract Class)是一种包含抽象方法(Abstract Method)的类,它不能被实例化,主要用于定义一个类应该具有的行为或特征,而将具体实现留给子类。
抽象类类似于一个设计模板,它定义了类的结构和行为规范,而不提供具体的实现细节。目的在于让子类按照这个模板来创建和修改新的类。抽象类不能被直接实例化,只能通过派生子类来创建对象。声明为抽象类的关键字是abstract。在抽象类中可以包含普通方法和抽象方法,其中抽象方法由子类来实现,而普通方法可以选择是否在子类中重写。
抽象类的定义:被关键字“abstract”修饰的类,为抽象类。(而且,abstract只能修饰类和方法)
//抽象类的语法:
public abstract class 类名{
//属性定义
//普通方法定义
//抽象方法定义
….
}
在抽象类中,可以有0个或者多个抽象方法,也可以有普通的实例方法和静态方法,还可以有其他的成员变量和构造方法 。
一定是抽象类的情况:
- 类中明确声明有abstract方法的。
- 类是抽象类继承下来的,而且没有实现父类中全部的抽象方法。
- 类实现了一个接口,但没有将其中所有的抽象方法实现。
二、抽象方法
抽象方法(Abstract Method)是一种在抽象类中声明但没有提供具体实现的方法。它是一种纯虚的方法,即没有方法体的方法,通常由 abstract 关键字来修饰。抽象方法只定义了方法签名,包括方法名和参数列表,但没有具体的功能实现。当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。 抽象类中不一定包含抽象方法,但是包含抽象方法的类一定是抽象类。
抽象方法的定义:使用abstract关键字定义的方法,抽象方法没有具体的方法体;抽象类必须也要用abstract关键字定义。
//抽象方法的语法:
访问修饰符 abstract 返回值类型 方法名(参数列表);
抽象方法的几个注意点:
- 构造方法不能声明为 abstract
- 静态方法不能声明为 abstract
- privale方法不能声明为 abstraet
- final方法不能声明为 abstract
- 抽象方法只能出现在抽象类或接口中
三、抽象类的特点
1,抽象类和抽象方法必须用abstract关键字修饰。
abstract class 类名 {}
public abstract void 方法名();
2,抽象类不一定要包含抽象方法,但包含抽象方法的类必须是抽象类或接口。
3,抽象类本身不能被实例化,但是可以通过创建一个继承自抽象类的非抽象子类来实例化抽象类的对象。这个非抽象子类必须实现抽象类中的所有抽象方法。
/**所有一般学生类的定义*/
public abstract class Student {
/**
* 定义一个学习的抽象方法,
* 作为父类,我们根本不需要实现该方法
*/
public abstract void study();
private String name;
//设定学生的名字
public void setName(String name) {
this.name = name;
}
public String getName()
return name;
}
}
//继承Student类
public class UNStudent extends Student {
//如果子类不是抽象类,那么子类必须要重写父类所有的抽象方法
//重写父类的抽象方法
public void study(){
System.out.println("UNStudent学习,要独立,名字 "+getName());
}
}
public static void main(String[] args) {
//创建大学生类的对象
UNStudent uns=new UNStudent();
//调用方法:这些方法是从父类中继承来的
uns.setName("我是大学生");
uns.study();
}
运行结果:
从上面的程序中可以发现,抽象类也可以像普通类一样,有构造方法、一般方法、属性,更重要 的是还可以有一些抽象方法,留给子类去实现.
4,抽象类的子类:要么是抽象类、要么重写抽象类中的所有抽象方法。
四、抽象类的规则
- 抽象类可以包含属性和普通方法(非抽象方法)
- 抽象类和抽象方法都必须用 abstract 关键字来修饰。
- 抽象类不能被实例化,也就是不能用 new 关键字去产生对象。
- 抽象方法只需声明,而不需实现。
- 含有抽象方法的类必须被声明为抽象类,抽象类的子类必须复写所有的抽象方法后才能被实 例化,否则这个子类还是个抽象类。
五、总结一些重要的注意事项
-
实现抽象方法:任何继承自抽象类的非抽象子类必须实现抽象类中的所有抽象方法,否则该子类也必须声明为抽象类。
-
实例化:不能直接实例化抽象类,必须通过创建非抽象的子类来实例化抽象类的对象。
-
继承:抽象类可以被其他类继承,子类可以继承抽象类的方法和成员变量,并在必要时重写这些方法。
-
设计合理性:抽象类应该被用于具有相似行为和属性的类族,确保抽象类的设计是合理和有意义的。
-
抽象类与接口的区别:抽象类和接口都可以包含抽象方法,但抽象类可以包含已经实现的方法和成员变量,而接口只能包含常量和抽象方法。
遵循这些注意事项可以帮助你更好地理解和使用抽象类。