JAVA内部类的作用、方法、使用

合集下载

方法内部类的定义和作用

方法内部类的定义和作用

方法内部类的定义和作用方法内部类(Method 的内部类)是一种在方法内部创建类的方式来扩展方法的功能。

它的作用是将一个方法的实现细节封装起来,使这个类的外部可以看到这个方法的实现细节,而不必访问外部类的全类。

下面是一个简单的方法内部类的定义和示例:```javapublic class Method内部类 extends方法外部类 {private static final String 遗传因素 = "遗传因素";public Method内部类() {super(遗传因素);}@Overrideprotected void method内部类() {// 方法内部实现细节}}```在这个例子中,方法外部类是一个继承自抽象方法的类。

方法内部类在方法内部实现了这个方法,并使用一个私有变量来存储遗传因素。

这个遗传因素可以被外部类访问,但只能通过方法内部类来访问。

方法内部类可以用于许多不同的场景,例如:1. 实现一个方法的扩展:如果一个方法需要额外的功能,可以在方法内部创建一个新的类来实现这些方法。

2. 将一个方法封装起来,使其更适合于特定的环境:如果某个方法在不同的环境中需要不同的实现方式,可以在方法内部创建一个新的类来实现这个方法,并将这个类封装到方法外部类中。

3. 实现方法的测试:在测试过程中,可以创建一个方法内部类来模拟方法的行为,并使用JVM的测试框架来测试这个方法的性能和安全性。

下面是一个使用方法内部类进行测试的示例:```javapublic class Method内部类Test {public static void main(String[] args) {// 创建方法内部类Method内部类 method内部类 = new Method内部类();// 调用方法内部类的方法method内部类.method内部类();// 测试方法内部类的方法method内部类.method内部类();}}```在这个例子中,我们创建了一个名为`Method内部类`的方法内部类,并使用`new`关键字创建了一个实例来调用这个方法内部类的方法。

Java程序设计中各种“内部类”的比较与应用探析

Java程序设计中各种“内部类”的比较与应用探析

Java程序设计中各种“内部类”的比较与应用探析【摘要】在一个类的内部定义的类称为内部类,内部类可分为实例内部类、静态内部类、局部内部类等。

本文就内部类的应用给出类相应的分析。

【关键词】内部类;实例内部类;静态内部类;局部内部类在Java语言中,在一个类的内部定义的类称为内部类,内部类允许把一些逻辑相关的类组织在一起,并且控制内部类代码的可视性。

内部类按作用域可以分为成员内部类和局部内部类,其中成员内部类又可以分为实例内部类和静态内部类,下面就三者的比较与应用进行分析。

1 实例内部类、静态内部类和局部内部类的比较分析1.1 主要特征实例内部类的实例引用特定的外部类的实例;静态内部类的实例不与外部类的任何实例关联;局部内部类的可见范围是所在的方法。

1.2 可用的修饰符实例内部类可是使用访问控制修饰符(public、protected、private),abstract,final;静态内部类可以使用访问控制修饰符,static,abstract,final;局部内部类只能使用abstract或final来修饰。

1.3 可用访问外部类的哪些成员实例内部类可用直接访问外部类的所有成员;静态内部类只能直接访问外部类的静态成员;局部内部类可以直接访问外部类的所有成员,并且能访问所在方法的final类型的变量和参数。

1.4 拥有成员的类型实例内部类只能拥有实例成员;静态内部类可以拥有静态成员和实例成员;局部内部类只能拥有实例成员。

1.5 外部类如何访问内部类的成员外部类必须通过实例内部类的实例来访问;外部类中的静态成员可以通过其静态内部类的完整类名来访问;外部类必须通过局部内部类的实例来访问。

2 内部类的应用分析2.1 封装类型面向对象的核心思想之一是封装,把所有不希望对外公开的实现细节封装起来。

顶层类只能处于public和默认访问级别,而内部类可以处于public、protected、private和默认4种访问级别。

java中类的用法

java中类的用法

java中类的用法Java是一种面向对象的编程语言,类是面向对象编程的基本概念之一。

在Java中,类是一种模板,它用来描述一类对象的方法和属性。

可以通过创建类的对象来使用它的方法和属性。

本文将介绍Java中类的用法。

一、定义类Java中定义类的语法如下:```java public class ClassName { // 类的成员变量 // 类的构造函数 // 类的方法 } ```其中,类名要遵循标识符的命名规范。

类的成员变量是类的属性,它们用于存储对象的状态。

类的构造函数用于创建对象并初始化它的成员变量。

类的方法用于定义对象的行为。

二、成员变量Java中的成员变量也称为类的属性,用于存储对象的状态。

成员变量可以是基本类型、引用类型或数组类型。

在类的定义中,成员变量要放在构造函数和方法的前面。

成员变量可以通过类的对象来访问和修改。

```java public class Person { private String name; private int age;public Person(String name, int age){ = name; this.age = age; }public String getName() { return name; }public void setName(String name){ = name; }public int getAge() { return age; }public void setAge(int age){ this.age = age; } } ```在上面的例子中,Person类有两个成员变量name和age,它们都使用private关键字修饰,表示只能在类内部访问。

同时,这个Person类提供了一个有参构造函数和getter、setter方法,用来访问和修改成员变量。

三、构造函数Java中的构造函数用于创建对象并初始化它的成员变量。

Java内部类(转)

Java内部类(转)

Java内部类(转)内部类 ———定义在类的内部的类为什么需要内部类? 典型的情况是,内部类继承⾃某个类或实现某个接⼝,内部类的代码操作创建其的外围类的对象。

所以你可以认为内部类提供了某种进⼊其外围类的窗⼝。

java中的内部类和接⼝加在⼀起,可以实现多继承。

可以使某些编码根简洁。

隐藏你不想让别⼈知道的操作。

使⽤内部类最吸引⼈的原因是: 每个内部类都能独⽴地继承⾃⼀个(接⼝的)实现,所以⽆论外围类是否已经继承了某个(接⼝的)实现,对于内部类都没有影响。

如果没有内部类提供的可以继承多个具体的或抽象的类的能⼒,⼀些设计与编程问题就很难解决。

从这个⾓度看,内部类使得多重继承的解决⽅案变得完整。

接⼝解决了部分问题,⽽内部类有效地实现了“多重继承”。

 内部类分为: 成员内部类、静态嵌套类、⽅法内部类、匿名内部类。

特点: ⼀、内部类仍然是⼀个独⽴的类,在编译之后内部类会被编译成独⽴的.class⽂件,但是前⾯冠以外部类的类命和$符号。

⼆、内部类可以直接或利⽤引⽤访问外部类的属性和⽅法,包括私有属性和⽅法(但静态内部类不能访问外部类的⾮静态成员变量和⽅法)。

内部类所访问的外部属性的值由构造时的外部类对象决定。

三、⽽外部类要访问内部类的成员,则只能通过引⽤的⽅式进⾏,可问内部类所有成员 四、访问机制: System.out.println(this.x);或System.out.println(x);//内部类访问内部类的成员变量或成员⽅法可⽤此⽅法。

System.out.println(OuterClass.this.x);//内部类访问外部类的同名变量时可⽤此⽅法,如果没有同名可⽤System.out.println(x); 五、内部类可以使⽤任意的范围限定:public/private/protected class InnerClass,且严格按照这⼏种访问权限来控制内部类能使⽤的范围。

普通类的范围限定只可以是public或者不加。

内部类实验报告

内部类实验报告

一、实验目的1. 理解内部类的概念及其在Java编程中的应用。

2. 掌握内部类的定义、使用方法和特点。

3. 通过实例分析,加深对内部类的理解。

二、实验环境1. 操作系统:Windows 102. 开发工具:Eclipse IDE3. 编程语言:Java三、实验内容1. 内部类的定义及特点2. 成员内部类3. 静态内部类4. 局部内部类5. 匿名内部类四、实验步骤1. 创建一个名为“OuterClass”的类,作为外部类。

2. 在“OuterClass”中定义一个成员内部类“InnerClass”。

3. 在“OuterClass”中定义一个静态内部类“StaticInnerClass”。

4. 在“OuterClass”中定义一个局部内部类“LocalInnerClass”。

5. 创建一个匿名内部类的实例,并演示其使用。

五、实验代码```java// 1. 创建外部类OuterClasspublic class OuterClass {// 2. 成员内部类InnerClasspublic class InnerClass {public void display() {System.out.println("这是成员内部类InnerClass的方法");}}// 3. 静态内部类StaticInnerClasspublic static class StaticInnerClass {public void display() {System.out.println("这是静态内部类StaticInnerClass的方法");}}// 4. 局部内部类LocalInnerClasspublic void outerMethod() {class LocalInnerClass {public void display() {System.out.println("这是局部内部类LocalInnerClass的方法");}}LocalInnerClass localInner = new LocalInnerClass();localInner.display();}// 5. 匿名内部类public void anonymousInnerClass() {Runnable runnable = new Runnable() {@Overridepublic void run() {System.out.println("这是匿名内部类的方法");}};new Thread(runnable).start();}public static void main(String[] args) {OuterClass outer = new OuterClass();OuterClass.InnerClass inner = outer.new InnerClass(); InnerClass.display();StaticInnerClass staticInner = new StaticInnerClass(); staticInner.display();outer.outerMethod();outer.anonymousInnerClass();}}```六、实验结果与分析1. 成员内部类:通过定义在类中的内部类,可以访问外部类的成员变量和方法。

public在java中的作用

public在java中的作用

public在java中的作用public是Java中的一个访问修饰符,它可以应用在类、方法和变量上。

下面将介绍public在Java中的作用以及相关参考内容。

1. 类的作用:在Java中,可以使用public修饰类,这样可以使得该类可以在任意的包中被访问和使用。

一个类只能有一个public修饰符,并且这个类的名称要与文件名相同。

参考内容:- 《Java核心技术卷一》(原书第10版)- 有关修饰符的讲解- 《深入理解Java虚拟机:JVM高级特性与最佳实践》(第3版) - 对访问修饰符的意义和使用的详细解释2. 方法的作用:使用public修饰的方法可以被任何类和对象访问,无论是否处于同一个包中。

public方法是类对外提供的对外接口,供其他类调用。

参考内容:- 《Java编程思想(第四版)》- 对访问修饰符的介绍和使用案例- 《Effective Java》(第3版) - 对访问修饰符的最佳实践和使用场景进行解释3. 变量的作用:使用public修饰的变量可以被任何类和对象访问,无论是否处于同一个包中。

public变量是对外公开的数据,可以供其他类读取和修改。

参考内容:- 《Java编程思想(第四版)》- 对访问修饰符的介绍和使用案例- 《Effective Java》(第3版) - 对访问修饰符的最佳实践和使用场景进行解释总结:通过以上介绍可以看出,public修饰符在Java中的作用主要是对外公开和访问控制。

- 对于类,使用public修饰符可以使得该类可以在任意的包中被访问和使用。

- 对于方法,public修饰符可以使得方法对外开放,方便其他类进行调用。

- 对于变量,public修饰符可以将变量对外公开,以供其他类进行读取和修改。

使用public时需要注意:- 对于类和方法,仅在需要对外公开使用的时候使用public修饰符,减少不必要的访问权限。

- 对于变量,建议使用private修饰符,并提供公开的访问方法(如get和set方法)来提供对外的访问接口。

java typereference 二层嵌套 -回复

java typereference 二层嵌套 -回复

java typereference 二层嵌套-回复Java中的嵌套类型(Nested Types)是指在一个类中定义另一个类。

这种二层嵌套类型可以是内部类(Inner Class),也可以是静态嵌套类(Static Nested Class)。

在本文中,我们将探讨Java中的二层嵌套类型,并深入了解它们的使用和作用。

首先,让我们从内部类开始。

内部类是指在另一个类内部定义的类。

这种定义方式使得内部类可以直接访问外部类的成员变量和方法,而不需要使用实例变量。

内部类有四种类型:成员内部类(Member Inner Class)、局部内部类(Local Inner Class)、匿名内部类(Anonymous Inner Class)和静态内部类(Static Inner Class)。

成员内部类是最常见的内部类类型,它是在外部类的成员位置上定义的。

下面是一个例子:javapublic class Outer {private int outerField;成员内部类public class Inner {public void printField() {System.out.println("外部类的成员变量outerField 的值是:" + outerField);}}}在这个例子中,类`Inner`是类`Outer`的成员内部类。

它可以直接访问外部类`Outer`的成员变量`outerField`。

为了创建内部类的实例,我们需要先创建外部类的实例,然后使用外部类的对象来创建内部类的对象,如下所示:javapublic class Main {public static void main(String[] args) {Outer outer = new Outer();Outer.Inner inner = outer.new Inner();inner.printField();}}在上面的示例中,我们首先创建外部类`Outer`的实例`outer`,然后使用`outer`来创建内部类`Inner`的实例`inner`。

内部类的作用

内部类的作用

内部类的作用
1 可以直接访问外部类的所有成员,包括private成员,因为内部类对象中包含了指向外部类对象的引用。

这个引用的name 为:外部类的名称.this,在内部类中访问外部类成员时,这个引用通常被省略。

2 内部类的调用:
外部类外部类名=new 外部类();
外部类.内部类内部类名=外部类名.new 内部类();
3 InnerClass function:
(1) To simplify code,enhance read;
简化代码,增强可读性;
(2)To better fix in code location about
that interface connection method;
为了更好的定位与接口关联的方法在代码中的位置;
(3)InnerClass can help us solving a question.class inherit Father class and implement interface,they have same method name but meaning is not;
内部类能够帮助解决一个类继承的父类方法和实现接口的方法同名而含义不同的问
题;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

引用:JAVA内部类的作用、方法、使用今天,因为在程序中使用内部类[事件],但要将外部类传递到调用类里面。

在内部类如何调用外部类,通过网络搜索,找到了方法:outclass.this,可以在内部类里引用外部类对象。

当然,还有其他的一些设计与说明,非常的好!内部类:一个内部类的定义是定义在另一个内部的类。

原因是:1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。

2.对于同一个包中的其他类来说,内部类能够隐藏起来。

3.匿名内部类可以很方便的定义回调。

4.使用内部类可以非常方便的编写事件驱动程序。

提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比。

内部类从表面上看,就是在类中又定义了一个类(下文会看到,内部类可以在很多地方定义),而实际上并没有那么简单,乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了解,你会发现Java的设计者在内部类身上的确是用心良苦。

学会使用内部类,是掌握Java高级编程的一部分,它可以让你更优雅地设计你的程序结构。

下面从以下几个方面来介绍:* 第一次见面public interface Contents {int value();}public interface Destination {String readLabel();}public class Goods {private class Content implements Contents {private int i = 11;public int value() {return i;}}protected class GDestination implements Destination {private String label;private GDestination(String whereTo) {label = whereTo;}public String readLabel() {return label;}}public Destination dest(String s) {return new GDestination(s);}public Contents cont() {return new Content();}}class TestGoods {public static void main(String[] args) {Goods p = new Goods();Contents c = p.cont();Destination d = p.dest("Beijing");}}在这个例子里类Content和GDestination被定义在了类Goods内部,并且分别有着protected和private修饰符来控制访问级别。

Content代表着Goods的内容,而GDestination代表着Goods的目的地。

它们分别实现了两个接口Content和Destination。

在后面的main方法里,直接用 Contents c和Destination d进行操作,你甚至连这两个内部类的名字都没有看见!这样,内部类的第一个好处就体现出来了??隐藏你不想让别人知道的操作,也即封装性。

同时,我们也发现了在外部类作用范围之外得到内部类对象的第一个方法,那就是利用其外部类的方法创建并返回。

上例中的cont()和dest()方法就是这么做的。

那么还有没有别的方法呢?当然有,其语法格式如下:outerObject=new outerClass(Constructor Parameters);outerClass.innerClass innerObject=outerObject.new InnerClass(Constructor Parameters);注意在创建非静态内部类对象时,一定要先创建起相应的外部类对象。

至于原因,也就引出了我们下一个话题??* 非静态内部类对象有着指向其外部类对象的引用对刚才的例子稍作修改:public class Goods {private valueRate=2;private class Content implements Contents {private int i = 11*valueRate;public int value() {return i;}}protected class GDestination implements Destination {private String label;private GDestination(String whereTo) {label = whereTo;}public String readLabel() {return label;}}public Destination dest(String s) {return new GDestination(s);}public Contents cont() {return new Content();}}修改的部分用蓝色显示了。

在这里我们给Goods类增加了一个private成员变量valueRate,意义是货物的价值系数,在内部类Content的方法value()计算价值时把它乘上。

我们发现,value()可以访问valueRate,这也是内部类的第二个好处??一个内部类对象可以访问创建它的外部类对象的内容,甚至包括私有变量!这是一个非常有用的特性,为我们在设计时提供了更多的思路和捷径。

要想实现这个功能,内部类对象就必须有指向外部类对象的引用。

Java编译器在创建内部类对象时,隐式的把其外部类对象的引用也传了进去并一直保存着。

这样就使得内部类对象始终可以访问其外部类对象,同时这也是为什么在外部类作用范围之外向要创建内部类对象必须先创建其外部类对象的原因。

有人会问,如果内部类里的一个成员变量与外部类的一个成员变量同名,也即外部类的同名成员变量被屏蔽了,怎么办?没事,Java里用如下格式表达外部类的引用:outerClass.this有了它,我们就不怕这种屏蔽的情况了。

* 静态内部类和普通的类一样,内部类也可以有静态的。

不过和非静态内部类相比,区别就在于静态内部类没有了指向外部的引用。

这实际上和C++中的嵌套类很相像了,Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用这一点上,当然从设计的角度以及以它一些细节来讲还有区别。

除此之外,在任何非静态内部类中,都不能有静态数据,静态方法或者又一个静态内部类(内部类的嵌套可以不止一层)。

不过静态内部类中却可以拥有这一切。

这也算是两者的第二个区别吧。

* 局部内部类是的,Java内部类也可以是局部的,它可以定义在一个方法甚至一个代码块之内。

public class Goods1 {public Destination dest(String s) {class GDestination implements Destination {private String label;private GDestination(String whereTo) {label = whereTo;}public String readLabel() { return label; }}return new GDestination(s);}public static void main(String[] args) {Goods1 g= new Goods1();Destination d = g.dest("Beijing");}}上面就是这样一个例子。

在方法dest中我们定义了一个内部类,最后由这个方法返回这个内部类的对象。

如果我们在用一个内部类的时候仅需要创建它的一个对象并创给外部,就可以这样做。

当然,定义在方法中的内部类可以使设计多样化,用途绝不仅仅在这一点。

下面有一个更怪的例子:public class Goods2{private void internalTracking(boolean b) {if(b) {class TrackingSlip {private String id;TrackingSlip(String s) {id = s;}String getSlip() { return id; }}TrackingSlip ts = new TrackingSlip("slip");String s = ts.getSlip();}}public void track() { internalTracking(true); }public static void main(String[] args) {Goods2 g= new Goods2();g.track();}}你不能在if之外创建这个内部类的对象,因为这已经超出了它的作用域。

不过在编译的时候,内部类TrackingSlip和其他类一样同时被编译,只不过它由它自己的作用域,超出了这个范围就无效,除此之外它和其他内部类并没有区别。

* 匿名内部类java的匿名内部类的语法规则看上去有些古怪,不过如同匿名数组一样,当你只需要创建一个类的对象而且用不上它的名字时,使用内部类可以使代码看上去简洁清楚。

它的语法规则是这样的:new interfacename(){......}; 或 new superclassname(){......};下面接着前面继续举例子:public class Goods3 {public Contents cont(){return new Contents(){private int i = 11;public int value() {return i;}};}}这里方法cont()使用匿名内部类直接返回了一个实现了接口Contents的类的对象,看上去的确十分简洁。

在java的事件处理的匿名适配器中,匿名内部类被大量的使用。

例如在想关闭窗口时加上这样一句代码:frame.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});有一点需要注意的是,匿名内部类由于没有名字,所以它没有构造函数(但是如果这个匿名内部类继承了一个只含有带参数构造函数的父类,创建它的时候必须带上这些参数,并在实现的过程中使用super关键字调用相应的内容)。

相关文档
最新文档