abstract :抽象的,可以用来修饰类、方法。抽象的前提是必须实现继承。(父类只是提供了功能,父类的功能被子类实现。)
1.abstract修饰类:抽象类
1)抽象类不可被实例化
2)抽象有有构造器和构造方法(凡是类都有构造器和构造方法)
3)抽象方法所在的类,一定为抽象类
4)抽象类中可以存在非抽象方法
2.abstract修饰方法:抽象方法
1)格式:没有方法体,包括{}。如:public abstract void eat();
2)抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写此抽象方法。
3)若子类继承抽象类,并重写了所有的抽象方法,则此类是一个“实体类”,即可以实例化
4)若子类继承抽象类,没有重写所有的抽象方法,意味着此类中仍然含有抽象方法,那么子类必须定义为抽象类
3.abstract的限制
不能用来修饰属性、构造器、private、final、static
4.abstract的基本要求
不能用于修饰private,static,final,也不能用于修饰属性和构造器
abstract class A {
// 1.修饰属性时(因为属性在子类中时无法被改变的)
abstract int age;
// 2.修饰构造器(构造器不能被重写)
public abstract A1() {
}
/*
* 3.和private并用时(子类不能覆盖(或者重写)声明为private的方法的) private 不能在其他类继承,所有不能被定义为抽象
*/
private abstract void method1();
/*
* 4.和static并用时(static修饰属性,方法,类) 声明为静态的时候可以直接通过类来调用,但是通过类去调用这个方法的时候就会出现调空的情况
*/
public abstract static void mrethod2();
// 5.和final并用时候(final使得方法不可继承,不可被重写,但是abtract是必须让方法进行重写,相互之间矛盾)
public abstract final void method3();
}
5.abstract的应用
模式方法设计模式(抽象类的应用:用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的方法)
- 父类中的确定和不确定因素
1)确定:代码所花费的时间是确定的
2)不确定:花费时间的代码是不确定的
实例:
abstract class Template{
/*父类中的确定和不确定因素
1)确定:代码所花费的时间是确定的
2)不确定:花费时间的代码是不确定的
*/
abstract void code();
public void spendTime() {
long start = System.currentTimeMillis();
code();
long end = System.currentTimeMillis();
System.out.println("花费的时间:" + (end - start));
}
}
class SubTemplate extends Template{
public void code() {
boolean flag = true;
for (int i = 0; i < 1000; i++) {
for (int j = 0; j < 100; j++) {
if(i == j) {
flag = false;
break;
}
}
if(!flag) {
System.out.println(i);
}
}
}
}