51做网站,上海最专业的网站设,做的网站如何全屏,做那个网站系列文章目录 文章目录 系列文章目录前言一、抽象类二、模板设计模式总结 前言
当我们想让子类来实现方法时#xff0c;我们需要抽象类与抽象方法。 一、抽象类
当父类的某些方法#xff0c;需要声明#xff0c;但是又不确定如何实现时#xff0c;可以将其声明为抽象方法…系列文章目录 文章目录 系列文章目录前言一、抽象类二、模板设计模式总结 前言
当我们想让子类来实现方法时我们需要抽象类与抽象方法。 一、抽象类
当父类的某些方法需要声明但是又不确定如何实现时可以将其声明为抽象方法那么这个类就是抽象类。所谓抽象的方法就是没有实现的方法所谓没有实现就是指没有方法体。
//语法形式
访问修饰符 abstract 类名
{}访问修饰符 abstract 返回类型 方法名(参数列表);//没有方法体抽象类的作用抽象类在于设计让子类继承并实现
抽象类使用细则part11抽象类不能被实例化2抽象类不一定要包含abstract方法但这个类可以声明为abstract3一旦类包含absrtact方法则这个类必须声明为abstract4abstract只能修饰类和方法不能修饰属性和其他的
package com.hspedu.abstract_;public class AbstractDetail01 {public static void main(String[] args) {//抽象类 不能被实例化//new A();}
} //抽象类不一定要包含 abstract 方法。 也就是说,抽象类可以没有 abstract 方法
// 还可以有实现的方法。
abstract class A {public void hi() {System.out.println(hi);}
} //一旦类包含了 abstract 方法,则这个类必须声明为 abstract
abstract class B {public abstract void hi();
} //abstract 只能修饰类和方法 不能修饰属性和其它的
class C {// public abstract int n1 1;
}抽象类使用细则part25抽象类可以有任意成员【抽象类本质还是类】比如非抽象方法、构造器、静态属性等6抽象方法不能有主体既不能实现7如果一个类继承了抽象类则它必须实现抽象类的所有抽象方法除非它自己也声明为abstrat类8抽象方法不能使用private、final和static来修饰因为这些关键字都是和重写相违背的
package com.hspedu.abstract_;public class AbstractDetail02 {public static void main(String[] args) {System.out.println(hello);}
} //抽象方法不能使用 private、 final 和 static 来修饰 因为这些关键字都是和重写相违背的
abstract class H {public abstract void hi();//抽象方法
} //如果一个类继承了抽象类 则它必须实现抽象类的所有抽象方法 除非它自己也声明为 abstract 类
abstract class E {public abstract void hi();
} abstract class F extends E {
} class G extends E {
Overridepublic void hi() { //这里相等于 G 子类实现了父类 E 的抽象方法 所谓实现方法 就是有方法体}
} //抽象类的本质还是类 所以可以有类的各种成员
abstract class D {public int n1 10;public static String name 韩顺平教育;public void hi() {System.out.println(hi);}public abstract void hello();public static void ok() {System.out.println(ok);}
}二、模板设计模式
抽象类体现的就是一种模板模式的设计抽象类作为多个子类的通用模板子类在抽象类的基础上进行扩展、改造但子类总体上会保留抽象类的行为方式。
模板设计模式当功能内部一部分实现是确定一部分实现是不确定的。这时可以把不确定的部分暴露出去让子类去实现编写一个抽象父类父类提供了多个子类的通用方法并把一个或多个方法留给其子类实现就是一种模板模式
//需求
//有多个类完成不同的任务job要求统计得到各自完成任务的时间
package com.hspedu.abstract_;abstract public class Template { //抽象类-模板设计模式public abstract void job();//抽象方法public void calculateTime() {//实现方法 调用 job 方法//得到开始的时间long start System.currentTimeMillis();job(); //动态绑定机制//得的结束的时间long end System.currentTimeMillis();System.out.println(任务执行时间 (end - start));}
}package com.hspedu.abstract_;public class AA extends Template {//计算任务//1.... 800000Overridepublic void job() { //实现 Template 的抽象方法 joblong num 0;for (long i 1; i 800000; i) {num i;}}// public void job2() {// //得到开始的时间// long start System.currentTimeMillis();// long num 0;// for (long i 1; i 200000; i) {// num i;// }// //得的结束的时间// long end System.currentTimeMillis();// System.out.println(AA 执行时间 (end - start));// }} package com.hspedu.abstract_;public class BB extends Template{public void job() {//这里也去 重写了 Template 的 job 方法long num 0;for (long i 1; i 80000; i) {num * i;}}
}ackage com.hspedu.abstract_;public class TestTemplate {public static void main(String[] args) {AA aa new AA();aa.calculateTime(); //这里还是需要有良好的 OOP 基础 对多态BB bb new BB();bb.calculateTime();}
} 总结
有抽象方法的类必定是抽象类抽象类不一定有抽象方法。