一、抽象方法和抽象类的概念和使用
在之前的课程中学习了方法的覆写(子类覆写父类的方法),也就是子类可以重写父类的方法,但是这是可选的(你可以覆写也可以不覆写在语法上都不会出现问题的),如果有一个需求:要求父类的某个方法必须被子类覆写,那么就需要将父类的
这个方法定义为抽象方法(强制要求被覆写),如果一个类中出现了抽象方法那么这个类必须定义为抽象类,抽象类和抽象方法的定义语法:
●定义抽象类: public abstract class 类名{};
●定义抽象方法: public abstract 返回值类型 方法名();
[抽象方法没有方法体]
DEMO:定义一个抽象类
以上定义了一个抽象类,可以使用该抽象类实例化一个对象吗?
DEMO:使用抽象类实例化对象
发现了不能使用抽象类的构造方法实例化对象,如果不能实例化对象那么抽象类中的所有操作(属性和方法)都没有任何意义,因为不能访问啊,此时可以通过子类来继承抽象类中的操作,让子类对象去调用。
DEMO:定义抽象类的子类.
此时定,义了抽象类的子类,但是要求子类必须覆写父类的所有抽象方法。使用将父类的方法定义为抽象方法的方式来实现强制要求覆写某个方法的目的。
但是有一种情况可以不要求子类覆写父类的所有抽象方法,如果子类也是一个抽象类的时候可以不覆写父类的抽象方法。
DEMO:子类是抽象类
此时可以选择性覆写父类的抽象方法。
总结:
1、定义抽象类和抽象方法使用的关键字是“abstract"
2、抽象类被叫做一个不完整的类因为它有自己的构造方法,但是却不能直接实例化对象,他的抽象方法没有方法体。
3、如果子类不是一个抽象类那么必须覆写父类的所有抽象方法
面试题:
1、抽象类中可以没有抽象方法吗?
答:可以的
2、如抽象类没有抽象方法,那么可以直接实例化对象吗?
答:不可以,因为没有抽象方法它依然是-一个抽象类
3、抽象类的方法必须被子类覆写吗?
答:不一定,如果子类是一个普通类则必须全部覆写,如果子类是一个抽象类则不强制要求全部覆写父类的抽象方法。
5、抽象类中的抽象方法的abstract关键字可以被省略吗?
答:不可以(但是在后面的接口中可以省略)
有完整的Java初级,高级对应的学习路线和资料!专注于java开发。分享java基础、原理性知识、JavaWeb实战、spring全家桶、设计模式、分布式及面试资料、开源项目,助力开发者成长!
欢迎关注微信公众号:码邦主