Java抽象类、抽象方法、final修饰符
什么是抽象类
-
使用abstract修饰符修饰的类被称为抽象类
-
抽象类不能实例化对象,只能被继承。
抽象类和抽象方法都通过abstract关键字来修饰
示例如下:
/**
* 交通工具的抽象类
*/
public abstract class Traffic {
}
什么是抽象方法
使用abstract修饰符修饰的方法被称为抽象方法
什么时候使用抽象方法?
当多个类有相同的方法,但方法体不一样,这时候就可以抽取出抽象方法。
public abstract class Traffic {
public abstract void run(); //Traffic抽象类中的抽象方法
}
抽象方法不能有方法体,如果子类想要继承父类,那么子类必须重写抽象类中所有的抽象方法。
/**
* 火车类,继承Traffic
*/
public class Train extends Traffic {
public void run() { //重写Traffic抽象类中的抽象方法
System.out.println("火车在轨道上行驶");
}
}
/**
* 飞机类,继承Traffic
*/
public class Plane extends Traffic {
public void run() { //重写Traffic抽象类中的抽象方法
System.out.println("飞机在天上飞");
}
}
下面编写测试类来一起看下结果,在这里要记住抽象类不可以实例化对象,只能被继承。
/**
* 测试类
*/
public class TestTraffic {
public static void main(String[] args) {
Train train = new Train();
Plane plane = new Plane();
train.run();
plane.run();
}
}
输出结果:
火车在轨道上行驶
飞机在天上飞
注意事项:
- 抽象类中不一定包含抽象方法,但包含抽象方法的类一定是抽象类。
- 抽象类可以有抽象方法和非抽象方法。
- 抽象类不可以实例化对象。
- 有抽象方法的类必须声明为抽象类,子类必须重写所有的抽象法才能实例化,否则子类还是一个抽象类。
问题:
问:抽象类中可以有构造方法吗?
答:抽象类可以有构造方法,其构造方法可以被本类的其他构造方法调用,若此构造方法不是由private修饰,也可以被本类的子类中的构造方法调用。
final修饰符
修饰类
-
该类不能被继承
-
类中的方法不会被覆盖,因此默认都是final的。
-
用途:设计类时,如果该类不需要有子类,不必要被扩展,类的实现细节不允许被改变,那么就设计成final类
修饰方法
-
该方法可以被继承,但是不能被覆盖。
-
用途:一个类不允许子类覆盖该方法,则用final来修饰
-
好处:可以防止继承它的子类修改该方法的意义和实现;更为高效,编译器在遇到调用fianal方法转入内嵌机制,提高了执行效
-
注意:父类中的private成员方法不能被子类覆盖,因此,private方法默认是final型的
修饰变量
-
用final修饰后变为常量。包括静态变量、实例变量和局部变量这三种。
-
特点:可以先声明,不给初值,这种叫做final空白。但是使用前必须被初始化。一旦被赋值,将不能再被改变。
修饰参数
- 用final修饰参数时,可以读取该参数,但是不能对其作出修改。
上一篇: 第三章 线程的同步与死锁
下一篇: Java线程之如何分析死锁及避免死锁