抽象类abstract
- 抽象类的介绍
- 抽象类的使用细节
当父类的一些方法不能确定时, 可以用abstract关键字来修饰该方法,这个方法就是抽象方法,用abstract来修饰该类就是抽象类。
// Animal 为抽象类
abstract class Animal{private String name;public Animal(String name) {this.name = name;}// 当一个类中存在抽象方法时,需要将该类声明为 abstract 类// 般来说,抽象类会被继承,有其子类来实现抽象方法public abstract void eat();
}
抽象类的介绍
1) 用abstract关键字来修饰一个类时,这个类就叫抽象类;
访问修饰符 abstract 类名{}
2) 用abstract关键字来修饰一个方法时,这个方法就是抽象方法
访问修饰符 abstract 返回类型 方法名(参数列表); // 没有方法体
3) 抽象类的价值更多作用是在于设计,是设计者设计好后,让子类继承并实现抽象类();
4) 抽象类,在框架和设计模式使用较多。
抽象类的使用细节
1) 抽象类不能被实例化;
2) 抽象类不一定要包含abstract方法。 也就是说,抽象类可以没有abstract方法;
public class Abstract01 {public static void main(String[] args) {// 抽象类,不能被实例化new A(); // 报错}
}// 抽象类不一定要包含abstract方法。 也就是说,抽象类可以没有abstract方法
abstract class A {public void hi(){System.out.println("hi");}
}
3) 旦类包含了abstract方法,则这个类必须声明为abstract;
4) abstract只能修饰类和方法,不能修饰属性和其它的;
5) 抽象类可以有任意成员【因为抽象类的本质还是类】,比如:非抽象方法、构造器、静态属性等等;
// 抽象类不一定要包含abstract方法。 也就是说,抽象类可以没有abstract方法
abstract class A {public int n1 = 10;public static String name = "MilkyWay";public void hi(){System.out.println("hi");}public abstract void hello();public static void ok(){System.out.println("ok");}
}
6) 抽象方法不能有主体;
abstract void aa(){}; // {} 不可以存在
7) 如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法,除非它自己也声明为 abstract 类;
abstract class B {public abstract void hi();
}abstract class C extends B {}class D extends B {@Overridepublic void hi() { // 这里相当于 D子类 实现了 父类B 的抽象方法// 所谓实现方法,就是有方法体}
}
8) 抽象方法不能使用private、final 和static来修饰,因为这些关键字都是和重写相违背的。