面向对象基础篇 – 内部类
什么是内部类
- 定义在一个类的内部的类称之为内部类
为什么定义内部类
- 在描述一类事物时,该事物的某一属性可能也是一种事物时
例如: 一个飞机类
class AirPlane{ String name ; //等等... Motor motor ; // 发动机,此时我们发现 这一属性也应该具体的出来时,我们就可以定义在飞机类的内部 class Motor{ //成员变量... //成员函数... } }
内部类的访问规则
非静态内部类
- 内部类可以直接访问到外部类的成员,但内部类并不能直接访问内部类,只有在创建内部类对象的时候才能访问
//例如
class Outer{
int num = 10 ;
class Inner{
public void show(){
System.out.println("我是内部类方法"+num);
//内部类可以直接访问外部类的成员变量
}
}
//如果,我们要调用内部类的方法此时应该先创建内部类对象
}
class Demo{
public static void mian(String[] args){
Outer out = new Outer();
//out.show() 直接通过外部类调用始掉不到的
//方法一
Outer.Inner in = new Outer.new Inner();
in.show();
//方法二
Outer.Inner in1 = out.new Inner();
in1.show();
}
}
- 一个类可以有多个内部类
- 内部类也可以拥有自己的内部类。但是不建议这么写
静态内部类
- 我们知道,一个类的静态属性或方法,可以直接通过类名来调用,静态内部类也是一样的
class Outer{
static int num = 10 ;
static class Inner{
public static void show(){
System.out.println("我是内部类方法"+num);
//内部类可以直接访问外部类的成员变量或方法
// 静态内部类只能访问外部类的静态属性和方法
}
}
}
class Demo{
public static void main(String[] args){
//直接通过外部类名访问内部类的方法
Outer.Inner.show();
}
}
非静态内部类注意点
- 不能定义静态的成员变量和成员方法,但可以定义静态常量
- 使用private修饰的内部类,只能在外部类中访问
内部类中访问外部类的同名属性或方法
- 内部类持有外部类的引用地址
class Outer{
int num = 10 ;
class Inner{
int num = 20 ;
System.out.println("我是内部类属性"+num);
System.out.println("我是内部类属性"+this.num);
System.out.println("我是外部类属性"+Outer.this.num);
}
}