文档介绍:第四章
类的高级特性
回顾
类是对象的抽象,将对象的属性和行为抽象为类中的数据和方法。
extends 关键字用于继承类。
super关键字用来解决如何直接访问或初始化从父类继承来的属性。
构造函数名称与类的名称相同,且没有返回类型。
方法重载和方法覆盖是Java实现多态性机制的方式。
2
目标
掌握类的静态成员
掌握final关键字用法
掌握抽象类的定义和用法
掌握接口的定义和用法
掌握高级访问控制        
了解内部类的概念
3
类的静态成员
类中的静态变量、方法或代码块属于类,而不属于某个特定的对象。
类的静态成员可以与类的名称一起使用,而无需创建类的对象。
静态变量或方法也称为类的变量或方法。
用static修饰符修饰,可以是变量、方法或代码块
4
静态变量
不管创建了类的多少实例,整个类中静态变量的副本只有一个。
引用静态变量的方法:
通过引用类的任一实例
通过类的名称
class StaticDemo {
static int x = 0;
StaticDemo(){x++;}
}
StaticDemo d1 = new StaticDemo();
StaticDemo d2 = new StaticDemo();
= 100 ;
= 200;
testVariable = ;
通过类实例访问
不是一个好方法
StaticDemo d1 = new StaticDemo();
StaticDemo d2 = new StaticDemo();
= 100;
= 200;
testVariable = ;
声明为static的变量实质上就是全局变量
通过类名访问
5
静态方法
与静态方法相关的几个要点:
类的静态方法只能访问其他的静态成员
静态方法没有this
静态方法不能被覆盖为非静态方法
class StaticFun {
static int i = 10;
int j;
static void setValue(int x) {
j=x;//出错
(" "+ i);
}
}
不能访问非静态变量j,可以访问静态变量i
class StaticTest {
static void test() { }
}
class Staticex extends StaticTest{
void test() {}//出错
}
6
静态块
如果需要通过计算来初始化静态变量,可以声明一个静态块。
静态块仅在该类被加载时执行一次。
只能初始化类的静态数据成员。
class TryInitialization {
static int[] values = new int[10]; //静态数组成员
static {
for(int i=0; i<; i++)
values[i] = (int)(*());
}
}
7
final 关键字/final类
final 修饰符可应用于类、方法和变量。
final在应用于类、方法和变量时意义是不同的,但本质是一样的:final表示不可改变。
声明为final的类不能被继承。
final 类示例:
final class TestFinal {
int i = 7;
int j = 1;
void f() {}
}
class Further extends TestFinal {}
final类不能被继承
8
final 方法
在方法声明中使用 final 关键字向编译器表明子类不能覆盖此方法。
在声明类中,一个 final 方法只被实现一次。
如果一个类为 final 类,那么它的所有方法都为隐式的 final 方法。
class TestFinal {
final void f() {}
}
class Further extends TestFinal {
final void f(){}
}
final方法不能被覆盖
9
final 变量
一个变量可以声明为final,这样做的目的是阻止它的内容被修改。
声明final变量后,只能被初始化一次,然后就不能对其值进行修改。
一个final变量实质上是一个常量。
class FinalDemo {
public static void main(String args[]){
final int noChange = 20;
noChange = 30;
}