---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
final:最终,作为一个修饰符。
1.可以修饰类,函数,变量。
2.被final修饰的类不可以被继承。为了避免被继承,被子类复写功能。
3.被final修饰的方法不可以被重写。
4.被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,又可以修饰局部变量。
当在描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字。方便阅读。
当这个值不需改变,所以加上final修饰作为常量,常量的书写规范是所有字母都大写,多个单词要用_连接。
5.内部类定义在类中的局部位置上,只能访问该局部被final修饰的局部变量。
class Demo{
final int x = 3;
public static final double MY_PI = 3.14;
final void show(){
}
}
class SubDemo extends Demo{
//void show(); 编译出错
}
class FinalDemo{
public static void main(String[] args){
}
}
抽象类。
当多个类中出现相同功能,但功能主体不同,可以进行向上抽取,这时只抽取功能定义,而不抽取功能主体。
抽象类的特点:
1.抽象方法一定在抽象类中;
2.抽象方法和抽象类必须被abstract关键字修饰;
3.抽象类不可以用new创建对象,因为调用抽象方法没有意义。
4.抽象类中抽象方法要被使用,必须由子类重写所有的抽象方法,建立子类对象调用。
如果子类只覆盖了部分抽象方法,那么子类还是一个抽象类。
/*
当多个类中出现相同功能,但是功能主体不同,可以进行向上抽取;
这时,只抽取功能定义,而不抽取功能主体。
抽象类,抽象类中抽象方法要被使用,必须由子类重写所有的抽象方法,建立子类对象调用。
如果子类只覆盖了部分抽象方法,那么子类还是一个抽象类。
*/
abstract class Student{
abstract void study();
abstract void study2();
}
class BaseStudent extends Student{
void study(){
System.out.println("BaseStudent");
}
void study2(){}
}
class AdvStudent extends Student{
void study(){
System.out.println("AdvStudent");
}
void study2(){}
}
class AbstractDemo{
public static void main(String[] args){
new BaseStudent().study();
}
}
抽象类与一般类区别:
抽象类和一般类没有太大的不同。该如何描述事物,就如何描述事物,只不过,该事物出现了一些看不懂的东西。这些不确定的部分,也是该事物的功能,需要明确出现,但是无法定义主体。通过抽象方法表示。
1.抽象类多了抽象方法,就是在类中可以定义抽象方法。
2.抽象类不能实例化。
特殊:
抽象类中,可以不定义抽象方法,这样做仅仅是不让该类建立对象。
/*
抽象类和一般类没有太大的不同。该如何描述事物,就如何描述事物,只不过,该事物出现了一些看不懂的东西。
这些不确定的部分,也是该事物的功能,需要明确出现,但是无法定义主体。通过抽象方法表示。
*/
abstract class Student{
abstract void study();
abstract void study2();
void sleep(){
System.out.println("sleep");
}
}
class BaseStudent extends Student{
void study(){
System.out.println("BaseStudent");
}
void study2(){}
}
class AdvStudent extends Student{
void study(){
System.out.println("AdvStudent");
}
void study2(){}
}
class AbstractDemo{
public static void main(String[] args){
new BaseStudent().study();//输出BaseStudent
new BaseStudent().sleep();//输出sleep
}
}
什么是模版方法呢?
在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定部分在使用不确定的部分,那么这时就将不确定的部分暴漏出去 。由该类的子类去完成。
/*
需求:获取一段程序运行的时间。
原理:获取程序开始和结束的时间并相减
*/
abstract class GetTime{
//不允许子类重写final。
public final void getTime(){
long start = System.currentTimeMillis();
runcode();
long end = System.currentTimeMillis();
System.out.println("time:"+(end-start));
}
public abstract void runcode();
}
class SubTime extends GetTime{
public void runcode(){
for(int i = 0;i<100;i++)
System.out.print(i);
System.out.println();
}
}
class TemplateDemo{
public static void main(String[] args){
SubTime t = new SubTime();
t.getTime();
}
}
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详情请查看:http://edu.csdn.net