/*
需求:获取一段程序运行的时间
原理:获取程序开始和结束的时间并相减即可。
获取时间:System.currentTimeMillis();
当代码完成优化后,就可以解决这类问题
这种方式就是:模版方法设计模式
什么是模版方法呢?
在定义功能时功能一部分是确定的,但是有一部分是不确定的,而确定的部分在使用不确定的部分,
那么这时就将不确定的部分暴露出去,由该类的子类去完成
*/
class GetTime
{
public final void getTime() //加final是为了没法改变和覆盖 这方法不给改
{
long star=System.currentTimeMillis();
runcode();
long end=System.currentTimeMillis();
System.out.println("毫秒:"+(end-start));
}
public abstract void runcode(); //一个函数,打印的 没具体内容,所以是抽象类
}
class SubTime extends GetTime
{
public void runcode() //子类里面的一个普通程序
{
for(int x=0;x<4000;x++)
{
System.out.print(x);
}
}
}
class TemplateDemo
{
public static void main(String[] args)
{
GetTime gt=new GetTime();
gt.getTime();
}
}
/*
接口:初期理解,可以认为是一个特殊的抽象类
当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示
class用于定义类
interface用于定义接口
接口定义时,格式特点:
1,接口中常见定义:常量,抽象方法
2,接口中的成员都有固定修饰符
常量:public static final
方法:public abstract
记住:接口中的成员都是public的
接口:是不可以创建对象的,因为有抽象方法
需要被子类实现,子类对接口中的抽象方法全都覆盖后
接口可以被类多实现 也是对多继承不支持的转换形式,java支持多实现
记住:一个类继承一个类还可以实现许多的接口
*/
案例:
interface Inter
{
public static final int NUM=3; //常量,不能变
public abstract void show(); //方法,抽象类的
}
interface InterA
{
public abstract void method();
}
class Test implements Inter,InterA //子类实现多接口接口
{
public void show(){} //覆盖接口方法
public abstract void method(); //覆盖接口InterA方法
}
class InterfaceDemo
{
public static void main(String[] args)
{
Test t=new Test();
System.out.print(t.NUM);
System.out.print(Test.NUM); //这三个打印的都是一样的是3
System.out.print(Inter.NUM);
}
}
多继承案例:
interface A
{
void methodA();
//int show(); 这是绝对不允许出现的因为和接口B类型不同
}
interface B
{
void methodB();
//boolean show() 这是绝对不允许出现的因为和接口A类型不同
} //而A 和B又被类D多实现,系统会报错
interface C estends B,A
{
void methodC();
}
class D implementd C
{
public void methodA(){}; //覆盖要记得加public
public void methodB(){};
public void methodC(){};
}
当子类继承父类是具备父类的全部功能
子类也可以实现一些接口,但不是强制的
|
|