-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
final: 最终。作为一个修饰符。
特点:
1、可以修饰类,函数,变量。
2、被final修饰的类不可以被继承。避免被继承,被子类复写。提高类的封装性。
3、被final修饰的方法不可以被复写。
4、被final修饰的变量是常量只能赋值一次,既可以修饰成员变量,又可以修饰局部变量。
当描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字。
方便于阅读。而这个值不需要改变,所以加上final修饰。
5、内部类只能访问被final修饰的局部变量。
如:public static final double PI = 3.14;
作为常量:常量的书写规范所有字母都大写,如果由多个单词组成。单词间通过_连接。
5、内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。
目前类的修饰符只有两个: public 和final。
抽象
当多个类中出现相同功能,但是功能主题不同。
这时可以进行向上抽取,只抽取功能定义,而不抽取功能主体。
抽象类的特点:
1、抽象方法一定在抽象类中。
2、抽象方法和抽象类都必须被abstract关键字修饰。
3、抽象类不可以用new创建对象。因为调用抽象方法没意义。
4、抽象类中的方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。
如果子类只覆盖了部分抽象方法,那么还是一个抽象类。
注意:含有抽象方法的类一定是抽象类。
抽象类使用举例:
<span style="font-size:18px;">abstract class Student
{
abstract void study();
}
class BaseStudent extends Student
{
void study()
{
System.out.println("base study");
}
}
class AdvStudent extends Student
{
void study()
{
System.out.println("adv study");
}
}</span>
与一般类区别:抽象类比一般类多了个抽象函数。就是在类中可以定义抽象方法。
抽象类不可以实例化。
特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。
模版方法设计模式:
知识点: final和abstract应用。
<span style="font-size:18px;">/*
* 需求:获取一段程序运行时间。
* 原理:获取程序开始和结束的时间并相减。
*
* 获取时间:System.currentTimeMillis();
*
* 当代码完成优化后,就可以解决这类问题。
* 这种方式,模版方法设计模式。
*
* 什么是模版方法呢?
* 在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定的部分在使用
*
*
*/
abstract class GetTime
{
//final 避免被复写
public final void getTime()
{
long start = 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<1000;x++)
System.out.println(x);
}
}
public class TemplateDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
GetTime gt = new SubTime();
gt.getTime();
}
}
</span>
接口
抽象类中的方法可以全是抽象方法,也可以只有一部分是抽象方法。
而接口中全是抽象方法。
class用于定义类
interfere 用于定义接口
接口定义格式特点:
1、接口中常见定义:常量,抽象方法。
2、接口中的成员都有固定修饰符。只有写入了接口中的元素就会加入固定的修饰符。
常量:public static final
方法:public abstract
写程序的时候尽量写全,便于程序阅读:
public static final int NUM = 3;
public abstract void show();
注意: 接口中的成员都是public的。
接口是不可创建对象的,因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全部覆盖后,子类才可以实例化。
否则子类是一个抽象类。
<span style="font-size:18px;">interface Inter
{
public static final int NUM = 3;
public abstract void show();
}
class Test implements Inter
{
public void show() {}
}
public class InterfaceDemo {
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.NUM);
System.out.println(Test.NUM);
System.out.println(Inter.NUM);
//Inter 只要一被加载Num就存在,所以这三句都正确。
}
}
</span>
因为接口没有方法主体,方法可以由子类任意定义。
类与类之间是实现关系,类与接口之间是实现关系。接口与接口之间是继承关系。
java支持接口与接口之间的多继承。
<span style="font-size:18px;">interface A
{
void methodA();
}
interface B
{
void methodB();
}
interface C extends B,A
{
void methodC();
}
class D implements C
{
public void methodA(){}
public void methodC(){}
public void methodB(){}
}
</span>
接口的作用:用于体系以外的功能扩展。
基本功能定义在类中,扩展功能定义在接口中。
例如:
运动员类都有运动的功能,而不一定具备学java的功能。
所以运动的功能定义在类中,学java的功能定义在接口中。
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------