内部类
定义:
内部类对象保存了一个对外部类对象的引用。
OuterClassName.this代表外部类对象的引用
InnerClassName.this代表内部类对象的引用
class Outer{
int outer_i = 100;
void test(){
Inner in = new Inner();
in.display();
}
//在外部类中创建内部类对象
void funcOuter() {
Inner inner = new Inner();
System.out.println(inner.in);
inner.funcInner();
}
class Inner{
void display(){
System.out.println("display: outer_i = " + outer_i);
}
void funcInner() {
System.out.println("ok");
}
}
}
特点
- 内部类可以直接访问外部类的成员,反之则不行。
- 内部类可以声明为private或protected。
- 内部类成员只有在内部类的范围之类是有效的。
访问内部类对象的两种方法
//1、创建外部类对象
Outer outer = new Outer();
//在外部类的方法中创建内部类对象
//通过这个内部类对象访问内部方法
outer.funcOuter();
//2、创建外部类对象
Outer outer2 = new Outer();
//通过外部类对象创建内部类对象
Inner inner = outer2.new Inner();
//通过这个inner可以访问内部类对象
inner.funcInner();
static内部类
特点
- static内部类可以象一个普通外部类一样直接创建该对象。
- static内部类只能访问外部类中的静态成员或方法。
- static内部类可以声明static成员,但非static的内部类不可以。
- 修饰符没有任何限制。
static class InnerStatic {
int num;
static int num3;// static内部类可以申明static成员
void funcInnerStatic() {
// System.out.println(out);//static外部类只能访问静态成员变量
System.out.println(num1);
// funcOuter();//static外部类只能访问静态方法
funcOuterStatic();
}
}
抽象类
定义 :用abstract来修饰一个类
特点
- 抽象类不能直接运用new创建对象
- 抽象类的实体中可以有abstract方法,且abstract方法只允许声明,而不允许实现
- 抽象一个类中包含了abstract方法,则这个类必须声明为abstract类。
- 抽象类的实现子类必须实现抽象类中所有的abstract方法