面向对象通识17(abstract
修饰符)
abstract
(抽象)
特性
该修饰符只能修饰方法和类
abstract
与final
是互斥的
原因:
- 对于类:前者修饰的类必须派生子类,后者修饰的类禁止派生子类
- 对于方法:前者修饰的方法必须要被重写,后者修饰的方法禁止被重写
抽象类
特征
有得有失——
有得:抽象类可拥有抽象方法(普通类有的,抽象类都有)
有失:抽象类失去了创建对象的功能
抽象类的主要作用——派生子类(子类构造器一定要调用父类构造器一次,因此抽象类必须有构造器)
作用
- 定义变量
- 调用类方法和类变量
- 派生子类(主要目的)
抽象方法
只有方法签名,没有方法体(花括号{}
)的方法,{}
的存在代表方法体的存在,单独存在代表空的方法体
再次强调,只有抽象类才能有抽象方法,普通类不能有抽象方法
所以,抽象方法必须要交由子类进行调用才能实现
抽象类派生子类
- 要么子类重写父类中所有的抽象方法,要么子类也只能是抽象的
此为“非抽象类不能调用抽象方法”这一规则的推论
举例:
public abstract class animal {
public static void main(String[] args) {
System.out.println("2333");
}
//抽象法方法
public abstract void a1();
public static void info(){
System.out.println("23233");
}
}
public class birds extends animal {
@Override//父类的抽象方法必须重写
public void a1() {
System.out.println("43343");
}
}
public class AnimalTest {
public static void main(String[] args) {
animal.info();
animal s1=new birds();
s1.a1();
}
}
/*
23233
43343
*/