一、认识一般类的类,方法,变量之间的访问:
(1) 静态的成员或方法直接用类名访问,非静态的要通过类的对象访问
(2) 静态方法不能访问非静态成员,不能调用非静态方法
(3) 非静态方法可以访问静态成员,可以调用静态方法
(4) 成员变量在类体中都是可见的【建立在(1),(2)的基础上】,但private的成员变量只在该类的类体中可见
(5) 非final的局部变量在方法结束后就失效,不可再访问,但final的依然存在,可以访问
(6) 成员变量,成员方法的修饰符:
访问控制 public default protected private
其它:static final
(7) 局部变量
只能是default 或final
二、认识内部类:
1,成员内部类
a) 非静态成员内部类---------->相当于非静态成员
b) 静态成员内部类------------>相当于静态成员
从访问方式分析:
从内部类中访问外部类的变量
a) 不爱限制 this代表内部类对象 Out.this代表外部类 (4)
b) 不能访问非静态的成员 (2)/(4)
从外部类中访问内部类:
a) / b) 访问不受限制,可通过创建内部类的实例访问 (4)
从外部类外访问内部类
a) 创建外部类的实例,再通过该实例创建内部类实例访问 new Out().new Inner().name (1)
b) 不用创建外部类对象,通过外部类名创建内部类实例访问 Out.new Inner().name (1)
***如果内部类的成员变量是private的就不能访问了 (4)
2,方法内部类--------->相当于局部变量 只能是default / final / abstract (7)
c) 非静态方法内部类
可自由访问外部类的成员(3),但不能访问方法的final局部变量(5)
e) 静态方法内部类
不能访问外部类的非静态成员或方法(2)
例子:
public void Outer {
//非静态成员
int column1;
//静态成员
static String column2;
//非静态成员内部类
private class Inner_1 {
}
//静态成员内部类
static class Inner_2 {
}
//非静态方法
void method1() {
//非静态方法内部类
class Inner3 {
}
}
//静态方法
static void method2 () {
//静态方法内部类
final class Inner4 {
}
}
}
/*
* 注:对内部类之间的调用关键在于理解一般类之间的调用情况,在此基础上参照比较。
*/
3,匿名内部类
实现接口的所有方法(占绝大多数)
接口(父类)------------------------------------->>>匿名实现类(匿名子类)
(复写父类的方法或扩展自己的方法)
public class Outer
{
public void start(){
//Thread的构造函数要传入Runable实现类的对象
//调用Thread对象start()起动一个新的线程
new Thread(
//匿名内部类对象
new Runable(){
//匿名内部类
public void run(){
//处理代码-------
};
}
).start();
}
}
/*
* 创建匿名内部类与创建其对象要一起进行
*/