抽象类
public abstract class Shape
{ //抽象方法
//普通方法
}
说明:
抽象类是用关键字abstract修饰的类;
抽象类中可以包含抽象方法和普通方法,也可以没有抽象方法。
抽象方法
用abstract修饰的方法,且没有方法体。
比如:
abstract class shape{
abstract double getArea();
}
说明:
shape 是抽象类;
getArea()是抽象方法,末尾以分号结束。
抽象类
(1)抽象类是对多个相似的类的抽象;
(2)抽象类用abstract定义;抽象方法用abstract定义且无函数体;抽象类中可以没有抽象方法,但包含抽象方法的类必须声明为抽象类。
(3)基于抽象类的子类中要给出抽象方法的具体实现(不同的子类有不同的实现方法——多态)
(4)(有点不理解啊) 抽象类不能实例化(即不能创建抽象类的对象,因为抽象方法无法执行),但可以声明抽象类的对象,用它引用不同子类的对象,从而实现:相同的语句(操作),实现不同的功能——多态
抽象方法
抽象方法是只有声明没有实现的方法,即方法体为空(通常使用分号;结束,而不是大括号{})。
抽象方法必须使用abstract关键字进行修饰。
含有抽象方法的类必须被声明为抽象类。
抽象类不能被实例化,即不能使用new关键字来创建抽象类的对象。
抽象类的特点
不能被实例化:抽象类不能用来创建对象,它主要是用来被继承的。
可以包含抽象方法:抽象类中可以包含抽象方法,也可以包含非抽象方法。
子类必须实现父类的所有抽象方法(除非子类也是抽象类):如果子类不是抽象类,那么它必须实现继承自父类的所有抽象方法。
可以包含构造方法:虽然抽象类不能被实例化,但它可以有构造方法,这些构造方法主要用于被子类调用,进行初始化操作。
不能声明为final:因为final修饰的类不能被继承,而抽象类必须被继承才有意义。
可以声明为static(但通常指的是静态内部抽象类):这里的“可以”指的是抽象类可以包含静态成员(包括静态方法、静态变量等),但抽象类本身不能被声明为static,因为static只能用于修饰成员,不能修饰类(除了静态内部类)。
示例
java
abstract class Animal {
// 抽象方法
abstract void eat();
// 非抽象方法
void sleep() {
System.out.println("This animal sleeps.");
}
}
class Dog extends Animal {
// 必须实现继承自Animal类的抽象方法eat
@Override
void eat() {
System.out.println("Dog eats meat.");
}
}
public class TestAbstractClass {
public static void main(String[] args) {
// Animal myAnimal = new Animal(); // 错误,因为Animal是抽象类
Dog myDog = new Dog(); // 正确,Dog是Animal的子类,且实现了所有抽象方法
myDog.eat(); // 输出: Dog eats meat.
myDog.sleep(); // 输出: This animal sleeps.
}
}
在这个例子中,Animal是一个抽象类,它包含了一个抽象方法eat和一个非抽象方法sleep。Dog类继承了Animal类,并实现了eat方法。由于Dog不是抽象类,因此它必须实现所有继承自Animal的抽象方法。最后,我们通过Dog类的对象来调用这些方法。