java特殊类,Java 语言之Java 特殊类

Java 局部变量分为以下四种:普通内部类,静态内部类,局部内部类和匿名内部类。对于内部类,有以下几点需要确认:

1:创建内部类对象的时刻并不依赖于外围类对象的创建。

2:内部类并没有“is a ”的关系.

3:内部类提供了更好的封装,除了该外围类,其他类都不能访问

1:普通内部类:

普通内部类就是直接将一个类的定义放在另外一个类类体的内部,该类被包括该类的类独享,任何外部类想访问该内部内首先要访问其外部类。普通内部类从概念上讲非常容易理解,其代码如下:

public class OuterClass {

public OuterClass()

{

}

public void show()

{

System.out.println("我是外部类");

}

public class InnerClass{

public InnerClass()

{

}

public void show()

{

System.out.println("我是内部类");

}

}

}

现在我们需要回答如下几个问题:1,内部类何时被创建.2, 如何访问内部类。3,内部类可以访问外部类的成员变量或者成员方法吗?如果可以,那么和外部类的成员变量访问修饰符有关系吗?先来回答第一个问题。首先我们要明确一个概念,就是内部类是一个编译时的概念,当编译完成以后,他和外部类属于完全不同的两个类。内部类的创建必须依附于外部类的对象,所以获取内部类对象的语法如下:

OuterClass o=new OuterClass();

OuterClass.InnerClass i=o.new InnerClass();

现在回答第二个问题,如何访问内部类。在创建内部类的对象以后,就可以把内部类当成一个普通的类来进行访问了。

第三个问题,内部类可以访问外部类的成员变量吗?可以,由于可以把内部类当成外部类的一个成员,那么内部类当然可以向普通成员方法一样访问外部类的成员变量。

2:局部内部类

局部内部类是创建在函数中的类,该类只能在该函数中实例化使用。

public void test()

{

class InnerClass{

InnerClass()

{

}

public void test()

{

System.out.println("我是局部内部类");

}

}

InnerClass i=new InnerClass();

i.test();

}

局部内部类类似于函数的局部变量,随着该方法调用的结束,该类也会消亡掉。注意局部内部类不可以有访问修饰符,因为没有任何在方法外部访问该类的可能,因此,局部内部类也就没有必要设置访问修饰符。

3:静态内部类:

静态内部类和成员内部类类似,只是在类名前面加上static 关键字,静态内部类类似于类的静态变量,可以不通过外部类的对象进行访问而直接通过类名访问。静态内部类的实例化可以不通过外部类而被直接实例化,例如:

public class OuterClass {

private String a="999";

public OuterClass()

{

}

public static class InnerClass{

InnerClass()

{

}

public void test()

{

System.out.println("我是静态内部类");

}

}

}

实例化该类的代码如下:

InnerClass i=new InnerClass();

同时,静态内部类只能访问外部类的静态成员而不能访问非静态成员,但是外部类访问静态内部类的成员只能通过内部类的实例来访问。

4:匿名类

匿名类是指没有类名的内部类,必须在创建时使用 new 语句来声明类。匿名类的创建方式如下:

new 父类构造器(参数列表)|实现接口()

{

//匿名内部类的类体部分

}

实现代码如下:

public class OuterClass {

void show() {

System.out.println("调用 Out 类的 show() 方法");

}

}

public class Test {

private void show() {

OuterClass anonyInter = new OuterClass() {

// 获取匿名内部类的实例

void show() {

System.out.println("调用匿名类中的 show() 方法");

}

};

anonyInter.show();

}

public static void main(String[] args)

{

Test test = new Test();

test.show();

}

}

这样调用的方法是内部类中的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值