本帖最后由 冯瑞君老师 于 2018-3-23 16:14 编辑
什么是JAVA内部类以及具体有哪几种?
一、内部类定义: 一个类的定义放在另一个类的内部,这个类就叫做内部类。 二、内部类的特点: 1、内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 。
2、内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否是private的 。
3、内部类声明成静态的,就不能随便的访问外部类的成员变量了,此时内部类只能访问外部类的静态成员变量 。 三、内部类分类:分四种
1) 静态内部类:
必须以static关键字标注
只能访问外部类中的静态的成员变量或者是静态的方法
访问一个内部类使应该这样
outerClass.innerClass inter = new outerClass.innerClass(); 不能直接实例化内部类 2)成员内部类:
定义在一个类的内部,但是没有static关键字修饰
生成示例的方法outerClass.innerClass inter = (new outerClass()).new innerClass()
对外部类变量的引用outClass.this.variale
可以访问外部类的静态与非静态方法 [Java] 纯文本查看 复制代码 class B extends TestPojo implements TestInterface {
// 内部类 B
public void run(){
System.out.println("跑!");
} // 重写的接口方法
public void testf() {
System.out.println("重写方法!");
} } // 方法里面调用内部类
public void test(){
B b = new B() ;
b.testf() ;
b.run() ;
b.testpojo() ;
} // 方法测试
public static void main(String[] args) {
A a = new A() ;
a.test() ;
}
}
// 定义了一个接口
interface TestInterface{
public void testf() ;
}
// 定义了一个普通类
class TestPojo {
public void testpojo(){
System.out.println("一个类");
}
}
// 实现 调用内部类里面的方法
class Textone {
public static void main(String[] args) {
A.B b = new A().new B() ; //调用类A里面的内部类B
b.testf() ;
b.run() ;
b.testpojo() ;
}
}
} 3)局部内部类:
局部内部类指的是定义在一个方法中的类
只有在当前方法中才能对局部内部类里面的方法以及变量进行访问
局部内部类只能访问其所在方法的final类型变量 [Java] 纯文本查看 复制代码 public class PerTest {
public void test(){ // 定义一个方法
class Ne{ // 定义一个方法内部类
public void fly(){ // 定义方法内部类的方法
System.out.println("在飞!");
}
} ;
new Ne().fle() ; //调用内部类的方法
}
public static void main(String[] args) {
new PerTest().test();
}
}
4)匿名内部类:
隐式的继承一个父类或者是实现某个接口
太原中心地址 太原市民营区五龙口街199号汇大国际品牌总部6号楼四层 邮编:100096 电话:4006189090
|