🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
~~~ /* abstract:是一个修饰符 可以修饰方法,类 1.当我们多个类存在相同的功能,但是功能的主体不同,这时我们 进行向上抽取,只抽取功能的定义,不抽取功能的主体 抽象类的特点: 1.抽象方法一定要在抽象类中 2.抽象类和抽象方法必须要被abstract关键字修饰 3.抽象的类是不能被创建对象,因为调用抽象的方法没意义 4.抽象类中的方法要被使用,必须由子类重写抽象类中的方法,然后创建子类对象调用 5.抽象类中可以定义非抽象的方法,有时候我们需要此类不能被new关键字创建时,可以用 abstract将此类变成抽象类 6.子类如果只重写一部分的抽象方法,那么该子类还是一个抽象类,如果抽象类的方法要被使用,子类 必须重写抽象类中的所有方法 值得注意: 抽象类和普通的类没有太大的不同。 1.抽象类无法通过new关键字创建对象 2.抽象类里面可有抽象的方法 */ ~~~ ~~~ package obj.c3; abstract class Animal{ abstract void sing(); } class Cat extends Animal{ void sing(){ System.out.println("喵喵唱歌"); } } class Dog extends Animal{ void sing(){ System.out.println("汪汪唱歌"); } } public class Test { public static void main(String[] args){ Animal c=new Cat(); c.sing(); } } ~~~ 模板方法设计模式 ~~~ package obj.c4; /** 求一段代码运行所花费的时间 原理:结束时间-开始时间 System.currentTimeMillis()//返回以毫秒为单位的当前时间。 */ abstract class Demo{//abstract防止该类被new关键字创建 public final void getTime(){//final防止该方法被重写 long start =System.currentTimeMillis();//1秒=1000毫秒 function(); long stop =System.currentTimeMillis(); System.out.println("共花费了"+(stop-start)); } public abstract void function();//提供给外界重写的抽象方法 } class Demo1 extends Demo{ public void function(){ for(int i=0;i<1000;i++){ System.out.println("f"); } } } public class Test { public static void main(String[] args) { Demo1 a=new Demo1(); a.getTime(); } } ~~~