Java基础>10 - 抽象类:abstract

个人学习总结:
链接:【Java基础、springboot、springcloud、docker 等,学习目录】

抽象类:

我们在描述一类事物的时候,该事物确实存在某种行为(方法),但是这种行为并不是具体的,那么我们可以抽象这种行为的声明(去掉方法的大括号,方法有大括号即具体的方法),而不去实现这种行为,这种行为成为抽象行为,使用抽象类描述该事物。

设计思想、目的:
可以强制要求子类重写父类抽象的方法。保证继承体系的完整性。

注意:
1、若一个函数没有方法体(大括号),那么就必须使用abstract将该函数修饰为抽象的函数。例如:public abstract void heart();
2、若一个类出现了抽象函数,那么该类必须使用abstract修饰(若一个类抽象方法,那么该类肯定是一个抽象类或者接口)。
3、若一个非抽象类继承了抽象类,那么子类必须实现父类所有的抽象方法。
4、抽象类可以存在非抽象方法和抽象方法(语法上支持抽象类不加抽象方法,springboot1.5的web配置类WebMvcConfigurerAdapter为抽象类,没有抽象方法)面试
5、抽象类不能实例化(创建对象),因为抽象类存在抽象的方法,抽象类创建对象调用抽象的没有意义。
6、抽象类存在构造方法,其作用是提供给子类创建对象时初始化父类属性的。(面试)

// 抽象类
public abstract class Person {
    String name;
    // 抽象类存在构造函数
    public Person(String name) {
        this.name = name;
    }
    // 非抽象方法
    public void heart(){
        System.out.println("The one : " + name);
    }
    // 抽象方法
    public abstract void game();
}
// 子类
public class Student extends Person {
    public Student(String name) {
        // 调用父类有参构造
        super(name);
    }
    @Override
    public void game() {
        System.out.println("子类必须重写父类抽象方法");
    }
}
// 测试
public static void main(String[] args) {
    Student student = new Student("Ron");
    student.heart(); // The one : Ron
    student.game();  // 子类必须重写父类抽象方法
}

abstract不能和以下关键字共同修饰一个方法:

1、private: 私有的方法是不能被子类继承的,也不存在覆盖。
2、static : 静态的方法不能被重写,使用static修饰后,可使用类名·方法名 的方式调用,调用抽象的方法无意义。
3、final: final修饰的方法不能被重写。

你可能感兴趣的:(Java基础)