抽象类
一.抽象方法与抽象类
1.概念
抽象方法:就是用abstract关键字修饰,并且没有大括号(方法体),直接分号结束的方法。
抽象类:定义了抽方法的类或者用abstract关键字修饰的类就是抽象类。
2.抽象类和抽象方法的语法格式
1.抽象类语法格式:
[权限修饰符] abstract class 类名
{
成员变量;
成员方法;
构造方法;
抽象方法;
}
2.抽象方法语法格式:
[访问修饰符] abstract 返回值类型 方法名(参数表);
例如:
public abstract void show();
3.抽象类概述
1.抽象类可以有成员变量、成员方法以及构造方法。
2.抽象类可以有抽象方法,也可以没有。
3.拥有抽象方法的类必须是抽象类。
4.抽象类的意义不在于实例化而在于被继承,若一个类继承自抽象类必须重写抽象方法,否则该类也是抽象类。
abstract class Animal {
String str;
Animal(String s) {
str = s;
}
abstract void eat();
}
class Horse extends Animal {
String str;
Horse(String s) {
super(s);
}
void eat() {
System.out.println("马吃草料!");
}
}
class Dog extends Animal {
String str;
Dog(String s) {
super(s);
}
void eat() {
System.out.println("够吃骨头!");
}
}
public class Test {
public static void main(String[] args) {
Animal h = new Horse("马");
Animal d = new Dog("狗");
h.eat();
d.eat();
}
}
输出结果为:
马吃草料!
狗吃骨头!
二、对比抽象类与最终类
1.最终类的特点
1.最终类是指不能被继承的类,即不能再用最终类派生子类。java语言中,最终类用关键字final来修饰。
2.java规定,最终类中的方法都自动成为final()方法。
2.抽象类的特点
1.不能new创建抽象类的实例。
2.与具体类相同的是,抽象类可以有成员变量和成员方法,包括构造方法,但与具体类不同的是,抽象类中可以定义抽象方法。
3.抽象方法只能出现在抽象类中,但抽象类中可以没有抽象方法。
4.抽象类中的所有抽象方法必须在其非抽象子类中加以实现,否则子类也必须声明为抽像类。