您的位置:首页 > 编程语言 > Java开发

(五)Java入门--内部类

2017-11-13 21:57 204 查看

一、内部类访问特点

内部类可以直接访问外部类的内容,但是外部类要想访问内部类,必须建立内部类的对象。

二、内部类的修饰符

内部类可以修饰为static,那里面访问外部类的变量必须是static的。

1、若内部类不加static,则相当于外部类的成员。(Out.In a = new Out().new In();)

2、若内部类加上static,外部类就不要建立对象进行访问了。(Out.In b = new Out.In(); )

3、若内部类中的函数是static(内部类必须是static),那内部类和外部类都不需要建立对象了。(Out.In.fun(); )

4、如果在外部类和内部类均有同样变量名的变量,则想在内部调用外部的变量,需要使用外部类名.this.

5、内部类在局部位置上只能访问局部中被final修饰的局部变量。(内部类在外部类的成员函数中,被称作局部位置)。

class Out {
private static int num = 20;  //静态内部类访问外部变量必须是静态的。
static class In {  //静态内部类
void show() {
System.out.println("In...." + num);
}
static void fun() {
System.out.println("fun...." + num);
}
}
}
public class NeiBU {
public static void main(String[] args) {

//内部类非静态,相当于外部类的成员
//        Out.In a = new  Out().new In();
//        a.show();

//内部类是静态的,就不要建立外部的对象了
Out.In b = new Out.In();
b.show();
//静态内部类的函数是静态的,不需建立内部和外部对象,直接访问。
Out.In.fun();
}
}


三、匿名内部类

如果内部类存在继承父类或者实现接口,可以不用内部类去创建对象,直接将所需的功能转化成匿名内部类的方法。

abstract class InFather {  //抽象父类
abstract void show1();
abstract void show2();
}

class Out1 {
//常规对象建立,并调用方法,有名字
/*    class  InSon extends InFather{ //继承并实现父类方法
void show1(){
System.out.println("show1....");
}
void show2(){
System.out.println("show2....");
}
}*/
public void method() {
/*InSon a = new InSon(); //建立对象调用方法
a.show1();
a.show2();*/

InFather b = new InFather() {
void show1() {
System.out.println("show1....");
}

void show2() {
System.out.println("show2....");
}
};
//InFather() {....}  等于 子类(InSon())对父类的实现
//new InFather() {....}  等于  创建子类对象
b.show1();
b.show2();
}
}

public class NoNameIn {
public static void main(String[] args) {
//匿名对象调用方法
new Out1().method();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class 对象