本节课主要讲了修饰符final,static,abstract和接口的用法。
1.final
final修饰变量时表示该变量为常数,该数在后续程序中不能被修改;当修饰类对象时,对象的成员能被修改,但对象引用不能改,例如:
final Student s= new Student ();
s.age=10;//修改引用的对象的成员变量,这一步对
s=null;//试图修改对象引用,这一步错
用java编程时变量常量名大写如final double PI=3.14159,而对象常量名小写如上面的s。final修饰类时,表示这个类为最终类,不能被继承;final修饰方法时表示在子类中不能声明与该方法同名的方法。
2.static
所有的类都是静态的,而创建的对象是动态的,类分布在静态存储区中,类中的静态变量被加载在该静态存储区,该变量为类类型变量,不是对象类型变量,访问类的静态成员变量时要用类名。举例:out为PrintStream类型对象,在System中out被声明为public static final,此类型变量称为全局静态变量;Math类中的所有成员都是静态的(全是函数),Math类和Systm类都不能创建对象,因为其还是抽象类。
3.abstract
抽象类不能实例化,抽象类不一定有抽象函数,但有抽象函数的类一定是抽象类。
抽象类的抽象函数不能实现,函数应这样定义(没有花括号),abstract void a();
在哪种情况下需要使用抽象类?举例:某个类中只有静态函数,不需要实例化,则该类可声明为抽象类。
abstract class A
{
public void a(){}
}
class B extends A
{
static public void main(String [] s)
{
A a =new B();//前面说过抽象类不能实例化对象,但这里创建的是子类B的对象,可以声明抽象类型的引用,其指向子类的一个对象
}
}
4.interface
接口与抽象类的区别:接口是行为的抽象类,接口的实现是多重实现,一个类可以实现多个接口,但只能继承一个类;接口的所有成员的类型均是public abstract型,如果一个类继承了一个接口,却没有实现接口里的所有函数,则该类要定义成抽象类。
当只想访问类的局部函数时,可把他抽象成接口里的函数,例如:
interface A
{
void a();//默认类型是public abstrac,所以没有花括号
}
class B implement A
{
public void a(){}
public static void main(String [] s)
{
A a=new B();
a.a();
}
}