1、抽象类概述
- 当父类的方法不能确定时,可以用abstract关键字来修饰该方法;
- ①用abstract来修饰该类就是抽象类,用abstract来修饰该方法就是抽象方法;
- ②抽象类不能被实例化;
- ③一旦类包含了abstract方法,则这个类必须声明为abstract;
- ④抽象类不一定要包含abstract方法,也就是说抽象类可以没有abstract方法;
- ⑤abstract只能修饰类和方法,不能修饰属性和其他的;
//eat:这里eat这里实现类,其实没什么意义;
//即:父类方法不确定性的问题;
//===》 考虑将该方法设计为抽象(abstract)方法;
//===》 所谓抽象方法就是没有实现的方法;
//===》 所谓没有实现就是指没有方法体;
//===》 当一个类中存在抽象方法时,需要将该类声明为abstract类;
//===》 一般来说,抽象类会被继承,有其子类来实现抽象方法;
- 范例
//1、创建抽象类 Eate
abstract class Eate {
String name;
int age;
public static String school = "小学";
//1、抽象方法定义
abstract public void cry();
//2、abstract只能修饰类和方法,不能修饰属性和其他的
public void run(){
System.out.println("正在跑...");
}
//3、静态方法
public static void eat(){
System.out.println("正在吃...");
}
//4、抽象方法定义
abstract void fee();
//5、静态代码块
static {
System.out.println("打印静态代码块!!!");
}
//6、普通代码块
{
System.out.println("打印普通代码块!!!");
}
}
//2、创建子类 Son继承Eate类
public class Son extends Eate{
public Son() {
}
@Override
//1、第一个抽象方法实现
public void cry() {
System.out.println("第一个抽象方法...");
}
//2、第二个抽象方法实现
public void fee(){
System.out.println("第二个抽象方法...");
}
}
//3、使用main方法实现子类
public class Abstrat {
public static void main(String[] args) {
Son son = new Son();
Son.eat();
System.out.println(Son.school);
}
}
- 运行结果
2、抽象类&抽象方法
(1)用abstract关键字来修饰一个类时,这个类就叫抽象类
访问修饰符 abstract 类名{}
(2)用abstract关键字来修饰一个方法时,这个方法就是抽象方法
访问修饰符 abstract 返回类型 方法名(参数列表); //没有方法体
(3)抽象类的价值更多作用在于设计,是设计者设计好后,让子类继承并实现抽象类;
(4)抽象类,考官比较爱问的知识点,在框架和设计模式使用比较多;
3、抽象类注意事项
(1)抽象类不能被实例化;
(2)抽象类不一定要包含absttract方法,也就是说抽象类可以没有abstract方法;
(3)一旦类包含了abstract方法,则这个必须声明为abstract;
(4)abstract只能修饰类和方法,不能修饰属性和其他的;
(5)抽象类可以有任意成员【抽象类本质还是类】,比如:非抽象方法、构造器、静态属性
(6)抽象方法不能有主体,即不能实现;
(7)如果一个子类继承了抽象类,则他必须实现抽象类的所有抽象方法,除非他自己也声明为abstract类;
(8)抽象方法不能使用private,final和static来修饰,因为这些关键字都和重写相违背的;