(一)抽象类的概念
1.抽象类用来描述一些代表通用概念的类。
2.例如汽车、火车、轮船等等,它们都属于交通工具,而交通工具只是一个抽象概念,因此我们可以定义一个交通工具类,并且将该类定义成抽象类。
3.在Java中用abstract修饰的类是抽象类。
例如:abstract class TrafficTool {……}
与普通类的区别:
- 抽象类中可能有抽象方法,普通类没有抽象方法。
- 抽象类不能实例化,普通类可以进行实例化。
- 3.抽象类不能用final修饰,普通类可以。
- 4.抽象类只能做父类被其他类继承。
注意:一个抽象类可能没有抽象方法,但抽象方法一定在抽象类里面。
(二)抽象方法的概念
1.抽象方法是指使用abstract修饰,并且只定义了方法头,而没有方法体和具体实现的方法。
例如:abstract void test();
2.抽象方法只能存在于抽象类中,主要用于说明该抽象类具有该功能,但是没有说明该功能是怎么实现的。例如交通工具都具有“运输”的功能,但是各种不同的交通工具的运输功能是不同的。因此我们在交通工具类中定义一个抽象的run()方法。
例如:
abstract class TrafficTool {
public abstract void run();
}
(三)抽象类的特性
1.抽象类只能用做父类,供其他类继承。因此定义抽象类时不能同时使用abstract和final。
2.抽象类中可以包含抽象方法,也可以不包含抽象方法。但是一个类中如果包含抽象方法,则该类必须是抽象类。
3.抽象类中可以包含构造方法和静态方法。但构造方法和静态方法不能是抽象的。
4.子类可以实现(重写)父类的抽象方法。如果有一个没有实现父类的抽象方法,则该子类还是抽象的。
5.抽象类不能被实例化,但是可以使用以下的形式创建一个继承该抽象类的匿名内部类的对象:
new 抽象类名() {
public void 方法名() {……}
…… // 抽象类中所有的方法都必须实现
};
例子:SampleAbstract.java
(四)抽象类的继承
一个类如果继承一个抽象类:
1.实现抽象类中所有的抽象方法。
2.若未实现的话该类定义为抽象类,默认继承抽象方法。
//定义一个抽象类
public abstract class Figuer {
public abstract void deformed();
}
//实现抽象类中的抽象方法
public class Rectangle extends Figuer {
public void deformed(){
}
}
//未实现抽象类中的抽象方法,此类仍然为抽象类
public abstract class Rectangle extends Figuer {
}
/*
匿名内部类,通过new 抽象类(){}
默认继承该抽象类的一个匿名内部类对象
可以通过多态将匿名内部类对象定义为抽象类类型
*/
public class FiguerTest {
public static void main(String[] args){
//1.还是需要重写实例化
new Figuer (){
public abstract void deformed(){
}
}
//2.此时定义为抽象类对象
// Figuer p1=new Figuer() {
//public abstract void deformed(){
//}
}
}
}