抽象方法、抽象类
1、抽象的概念
什么是抽象呢?抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征的过程。顾名思义,抽象就是抽出像的部分。
2、抽象方法
特点:
- 使用abstract修饰的方法,没有方法体,只有声明,没有大括号,直接分号结束的方法。
- 抽象方法定义的是一种规范,就是告诉子类必须要给抽象方法提供具体的实现。
3、抽象类
特点:
- List item定义了抽象方法的类或者使用abstract关键字修饰的类就是抽象类。
- 抽象类可以有成员变量、成员方法以及构造方法
- 抽象类可以有抽象方法,也可以没有
- 具有抽象方法的类必须是抽象类
- 抽象类的意义不在于实例化而在于被继承,若一个类继承自抽象类必须重写抽象方法,否则该类也是抽象类
- 抽象类的意义:多态、父类型引用指向子类型对象,给其他类提供继承,不能被实例化
- 通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。
4、抽象类的语法格式
[权限修饰符] abstract class 类名{
成员变量;
成员方法;
构造方法;
抽象方法;
}
5、抽象方法的语法格式
[访问修饰符] abstract 返回值类型 方法名(参数表);
来看一下一个简单的例子:
package TestMain;
//我们定义了一个抽象类Animal,里面有成员方法和成员变量
abstract class Animal {
int age;
public abstract void rest();
public abstract void run();
public void shout() {
System.out.println("Animal shout");
}
}
//定义一个Dog类继承抽象类Animal
class Dog extends Animal {
@Override
public void rest() {
System.out.println("Dog rest");
}
@Override
public void run() {
System.out.println("Dog run");
}
}
//测试用例
public class Test01 {
public static void main(String[] args) {
Dog dog = new Dog();
dog.rest();
dog.run();
dog.shout();
System.out.println(dog.age);
}
}
输出结果如下:
可以看到,测试用例中输出了重写方法的结果以及父类中成员方法和成员变量,抽象类的成员方法和成员变量可以被子类直接继承过去,而子类必须重写抽象方法,否则编译器报错。
6、对比抽象类与最终类
一、最终类的特点:
- 最终类是指不能被继承的类,即不能再用最终类派生子类,在Java语言中,如果不希望某个类被继承,可以声明这个类为最终类,最终类使用final关键字来修饰。
- Java规定,最终类的方法都自动生成final()方法。在Java中Math类是最终类,因为里面的方法不能被修改。
- 如果创建最终类似乎不必要,而又想保护类中的一些方法不被重写,可以用关键字final来指明那些不能被子类重写的方法,这些方法成为最终方法。
二、抽象类的特点
- 不能new创建抽象类的实例
- 与具体类相同的是,抽象类中可以有成员变量和成员方法,包括构造方法,但与具体类不同的是,抽象类中可以定义抽象方法。
- 抽象方法只能出现在抽象类中, 但抽象类中可以没有抽象方法。
- 抽象类中所有的抽象方法必须在其非抽象子类中加以实现否则子类也必须声明为抽象类。