static与继承
子类不能继承父类中的static成员
子类可以定义与父类的static变量同名的变量
子类不能定义与父类static方法同名的成员方法;但是子类可以定义与父类static方法同名的static方法
父类的非静态方法不能被子类覆盖为静态
注意与访问控制符的结合
public class Father{
static int i =1;
static void method(){}
}
class Son extends Father{
int i = 1; //合法
void method(){} //非法
static void method(){} //合法!注意访问控制符
}
静态初始化器
class Person {
public static int total;
static {
total = 100;//为total赋初值
}
…… //其它属性或方法声明
}
由static{ …} 构成,在类的定义体中、方法的外部可包含static语句块。
static语句块仅在其所属的类被载入时执行一次
static块通常用于初始化static (类)属性
如果有多个static块,在类的初始化时会依次执行。
static 与继承
n子类不能继承父类中的static成员
n子类可以定义与父类的static变量同名的变量
n子类不能定义与父类static方法同名的成员方法;但是子类可以定义与父类static方法同名的static方法
n父类的非静态方法不能被子类覆盖为静态
n注意与访问控制符的结合
Abstact
用abstract关键字来修饰一个类时,这个类叫做抽象类;用abstract来修饰一个方法时,该方法叫做抽象方法。
含有抽象方法的类必须被声明为抽象类。
抽象类不能被实例化(须说明)。
抽象方法只需声明,无方法体。
抽象类的继承
抽象类(抽象方法)是为继承而设计的。
子类继承父类(抽象类),则子类应重写父类所有的抽象方法,称为“实现”。
子类如果没有实现某一抽象方法,则子类也应声明为抽象类,否则编译错误。
没有抽象构造方法
内部类
public class A{
private int s = 111;
public class B {
private int s = 222;
public void mb(int s) {
System.out.println(s); // 局部变量s
System.out.println(this.s); // 内部类对象的属性s
System.out.println(A.this.s); // 外层类对象属性s
}
}
public static void main(String args[]){
A a = new A();
A.B b = a.new B();
b.mb(333);
}
}