Day06:抽象类、接口和内部类(上)
JVAV中的常量
什么是常量?
常量就是不会变化的数值
为什么需要常量?
方便使用(调用)不会变化的数值
特性
不能修改
所有对象共享
常量一定是成员
定义
public static final 类型 常量名=数值; public static final double PI=3.1415926;
常量使用类名调用,不能被修改
命名规范
所有字母都大写
多个单词用_分隔
赋值
声明的同时赋值
语法也允许在静态块中赋值
如果常量在声明的同时赋值
代码中调用这个常量的位置
编译时会替换这个常量的值
无需加载这个类,从而提高运行效率
抽象类
什么是抽象类?
不存在对象的类型就是抽象类
特征
抽象不能被实例化
抽象类中能编写抽象方法
抽象类中的抽象方法不限
编写抽象类
使用abstract(抽象)修饰类即可
抽象方法
什么是抽象方法?
不能编写具体实现的方法
特征
抽象方法不能写方法体
抽象方法必须在子类中被重写,除非子类也是抽象类
抽象方法必须在抽象类中
定义
在方法的返回值类型前,编写abstract
编写后这个方法的参数列表后只能跟“;”
好处
抽象类不能被实例化
只能作为父类,提供一个数据结构,减化编程
子类中必须重写父类的抽象方法,约束了子类的型为,更加自然的使用向上造型和方法重写
final关键字和abstract关键子字矛盾不能同时修饰一个类或方法
内部类
什么是内部类?
一个类的内部定义的另一个类我们将外部的类称为outer,将内部的类称为inner。
种类
在java中有很多不同形式的内部类主要
成员内部类和匿名内部类
成员匿名类
什么是匿名内部类?
在类中的成员位置声明(定义)的类结构。
特性
内部类可以访问外部类的私有成员;
当内部类和外部类有同名成员时内部可以使用
外部类名.this.成员
访问;
通常情况下内部类只会在外部类中使用,实例化内部类对象可以访问内部的私有成员;
如果非要在其他类中实例化内部类对象的话;
Outer.Inner inn=new Outer().new Inner();
匿名内部类
什么是匿名内部类?
在方法中通过一个类或实现一个接口类创建的没有名称的内部类。
特性
可以使用外部类的私有成员;
内部类和外部类的成员同名时,使用
外部类名.this.成员
来指定外部类的成员;
匿名内部类创建的对象,相当于这个类的子类对象在方法中使用;
如果这个类的对象只在某一个方法中使用一次的话,可以使用匿名内部类;
匿名内部类可以使用其所在方法的局部变量,但是要将其视为被final修饰的JDK1.6之前,
匿名内部类中使用的方法中的局部变量必须使用final修饰
计时器
什么是计时器?
定期或周期性的调用一个方法的特殊类
实现
每隔2秒输出
public static void main(String[] args) { System.out.println("start"); Timer ti=new Timer();//实例化Timer对象(java.util) TimerTask task=new TimerTask() { int i=1; @Override public void run() { //重写run方法 System.out.println("我是猪");//输出语句 i++;//每输出一次语句加1 if(i==5){//输出5次 cancel();//到达取消操作 } } }; //单位毫秒 ti.schedule(task,2000,2000);//在方法中使用Timer对象调用schedule方法 //定义间隔时间 }