抽象类的概念

在Java中,一个没有方法体的方法应该定义为抽象方法。在所有普通方法上面都会有一对大括号{},这个表示方法体,有方法体的方法一定可以被对象直接使用。抽象方法是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。

普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以含有构造方法,普通方法,static方法,常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分,抽象类也要使用abstract关键字声明。注意:抽象类中不一定有抽象方法(类只要使用abstract关键字声明就是抽象类,其中也可以没有抽象方法),有抽象方法的类一定是抽象类!!!

抽象类的特点

抽象类以及抽象方法的使用格式

抽象方法定义格式为:

修饰符 abstract 返回值类型 方法名 (参数列表);

注意:抽象方法的修饰符必须为public或protected(因为如果是private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public

示例:

public abstract void fun();

抽象类定义格式为:

abstract class 类名{

}

示例:

public abstract class Animal {
    public abstract void fun();
}

抽象类的实例化及使用

继承抽象类的子类要么重写抽象类所有的抽象方法(此时的方法重写,是子类实现父类的抽象方法),要么也声明为抽象类。

抽象类中可以有构造方法,但抽象类不能创建对象,抽象类只能通过子类对象实例化,抽象类中的构造方法是供子类创建对象时,初始化父类成员使用的,且依然满足先执行父类构造,再执行子类构造的顺序,这叫抽象类多态。

对于抽象类中的static方法,也可以在没有对象的情况下直接调用。

抽象类实例

//测试类
public class demo {
	public static void main(String[] args) {
		Animal a=new Cat();
		
		a.eat();
	}
}

//定义一个抽象类
public abstract class Animal {
	//定义一个抽象方法
	public abstract void eat();
}

//继承抽象类父类的子类
public class Cat extends Animal {
	//重写了抽象方法
	public void eat() {
		System.out.println("猫吃鱼");
	}
}