1. 抽象类的概念
普通类可以直接产生实例化对象, 并且在普通类之中可以包含有构造方法, 普通方法, 常量, 变量等内容. 而所谓的抽象类就是指在普通类的结构里面增加抽象方法的组成部分.
所有的普通方法上面都会有一个 "{}", 该符号表示方法体, 有方法体的方法一定可以被对象直接使用. 而抽象方法指的是没有方法体的方法, 同时抽象方法还必须使用 abstract 关键字定义.
拥有抽象方法的类一定属于抽象类, 抽象类要使用 abstract 声明.
抽象类不能实例化.(类一旦被实例化则就可以调用类中的方法或属性, 但是在抽象类中, 没有方法, 所以抽象类就不能被实例化.)
抽象类的使用规则:
抽象类必须有子类. 即: 每一个抽象类要被子类所继承. 抽象类的子类 (子类不是抽象类) 必须要覆写抽象类中所有的抽象方法,(一个子类只能继承一个抽象类, 单继承) 抽象类的实例化需要依靠子类完成, 采用向上转型的方法处理. 抽象类的相关限制
(1)由于抽象类里面会存在一些属性, 那么在抽象类之中一定存在构造方法, 其目的是为属性初始化. 并且子类对象实例化的时候, 依然满足于先执行父类构造, 再调用子类构造的情况.
(2)抽象类不能够使用 final 定义, 因为抽象类必须有子类, 而 final 定义的类不能够有子类.
(3) 外部类不允许使用 static 声明, 而内部的抽象类允许 static 声明. 使用 static 声明的内部抽象类就相当于是一个外部抽象类, 继承的时候使用 "外部类. 内部类" 的形式表示类名称.
(4)在任何情况下, 如果要执行类中的 static 方法的时候, 都可以在没有实例化对象的时候直接调用. 对于抽象类也是一样.
程序分析:
- abstract class A {
- public A(){
- // 第二步
- this.print();
- }
- public abstract void print();
- }
- class B extends A{
- private int num = 100;
- public B(int num){
- this.num = num;
- }
- public void print(){
- // 第三步
- System.out.print("num =" + num);
- }
- }
- public class TestDemo{
- public static void main(String args[]){
- new B(30);// 第一步
- }
- }
程序输出结果: num = 0;
分析:
在任何一个类的构造执行完之前, 所有属性的内容都是其对应数据类型的默认值. 子类构造方法之前, 一定先执行父类的构造方法.
来源: https://www.2cto.com/kf/201810/784264.html