抽象类(abstract修饰符)

abstract修饰方法,表示该方法为抽象方法,抽象方法是没有方法体的直接以;结尾。

特点

1.抽象类不能被实例化,即不能通过new来创建对象,它天生是用来被继承的。

2.抽象类可以有属性,构造方法,普通方法,抽象方法

3.抽象类可以有抽象方法也可以没有,但是,一个类中如果有抽象方法,则这个类一定是抽象类

4.抽象类天生就是用来继承的,一个类如果继承了抽象父类,则必须重写抽象父类中所有的抽象方法(强制),除非子类也是抽象类

抽象类和普通类的区别

1.抽象类不能被实例化,而普通类可以

2.抽象类可以有抽象方法,而普通类不可以有

3.普通子类继承普通父类,对父类的方法的重写不是强制要求的

4.普通子类继承抽象父类,则父类中的抽象方法是强制必须重写的

5.抽象子类继承抽象父类,则子类可以选择重写或者不重写父类方法

注意⚠️

1.abstract和final不能同时修饰类和方法

解答:final的类不能被重写和继承;而abstract的类是抽象类,本身没有实现,只能通过子类来实现,也就是说必须被继承。所以说它们是没法同时做修饰符的。

2.static和abstract不能同时修饰类和方法

解答:

abstract修饰符用来声明抽象方法,抽象方法没有方法体,不能被直接调用,必须在子类重写方法后才能使用。
static:用来声明静态方法,静态方法可以被类及其对象调用。

用static声明方法表明这个方法在不生成类的实例时可直接被类调用,而此时abstract方法不能被调用,两者矛盾。所以,abstract与static不能连用来修饰方法

3.private和abstract不能同时存在

解答:private:私有的方法子类是无法继承的,但是abstract又要求子类需要实现抽象方法,故矛盾。

补充为什么main方法是静态的

如果main方法不声明为静态的,JVM就必须创建main类的实例,因为构造器可以被重载,JVM就没法确定调用哪个main方法。

posted @ 2022-03-21 11:47  JanoCode  阅读(579)  评论(0)    收藏  举报