抽象类
抽象方法与抽象类
(1)概念
抽象方法:就是用abstract关键字修饰,并且没有大括号,直接分号结束的方法。
抽象类:定义了抽象方法的类或者用abstract 关键字修饰的类就是抽象类。
(2)抽象类和抽象方法的语法格式
①抽象类语法格式:
「权限修饰符] abstract class 类名
{ 成员变量;
成员方法;
构造方法;
抽象方法
}
②抽象方法语法格式:
例如:
[访问修饰符] abstract 返回值类型 方法名(参数表);
public abstract void show();
(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)最终类的特点
①最终类是指不能被继承的类,即不能再用最终类派生子类。在Java语言中,如果不希望某类被继承,可以声明这个类为最终类。最终类用关键字final来修饰。
②Java 规定,最终类中的方法都自动成为final()方法。在Java中Math类是最终类,因为里面的方法不能被修改。
③如果创建最终类似乎不必要,而又想保护类中的一些方法不被重写,可以用关键字final 来指明那些不能被子类重写的方法,这些方法称为最终方法。
(2)抽象类的特点
①不能new创建抽象类的实例。
②与具体类相同的是,抽象类中可以有成员变量和成员方法,包括构造方法,但与具体类不同的是,抽象类中可以定义抽象方法。
③抽象方法只能出现在抽象类中,但抽象类中可以没有抽象方法。
④抽象类中的所有抽象方法必须在其非抽象子类中加以实现,否则舌类也必须声眼咨抽象类。