JAVA学习——内部类
2012-03-19 06:43
246 查看
JAVA学习——内部类
一、内部类的访问规则。
1、 内部类可以直接访问外部类的成员,包括私有成员,原因是:内部类中持有一个外部类的引用,格式为:外部类名.this。
2、 外部类访问内部类必须建立内部类对象。
3、 当内部类定义在直接外部类的成员位置上,而且是非私有成员,可以在间接外部类中引用内部类,其格式为:直接外部类名.内部类名 对象名=
new直接外部类构造函数名.new 内部类构造函数名,形如Outer.Inner
inner = new Outer().new Inner();。
4、 在成员位置上的内部类可以被可以被成员修饰符修饰,比如:private
static(当内部类被其修饰,则内部类只能访问直接外部类的静态成员)等内部类相当于外部类的一个成员。内部类有static修饰时则内部类必须是static。
5、 当内部类定义在局部时,1)、不可以被成员修饰符修饰。2)、可以直接访问外部类中的成员,因为该内部类还持有外部类的引用。但不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。
实例演示:
package com.abin;
class Outer{
//定义外部内的私有成员
private int x=2;
//创建内部类
class Inner{
//定义内部类的私有成员
private int x =
4;
public void show(){
int x = 6;
System.out.println("您正在访问内部类的show()方法");
System.out.println("在内部类Inner的方法show()中调用方法内部成员x="+x);
System.out.println("在内部类Inner的方法show()中调用内部类私有成员x="+this.x);
System.out.println("在内部类Inner的方法show()中调用外部类的私有成员x="+Outer.this.x);
}
}
public void show(){
System.out.println("您正在访问外部类的show()方法");
//在外部类中访问内部类需要建立内部类的对象
Inner inner = new Inner();
inner.show();
}
}
public class InnerClass
{
public static void main(String[]
args) {
//实例化外部类
Outer outer = new Outer();
//调用外部类方法
outer.show();
//直接实例化内部类
Outer.Inner inner = new Outer().new Inner();
System.out.println("通过内部类实例化的对象调用内部类方法show():");
inner.show();
}
}
二、匿名内部类
1、匿名内部类其实就是内部类的简写格式。
2、定义内部类的前提:内部类必须是继承一个类或者实现接口。
3、匿名内部类的格式:new 父类或者接口名(){定义子类的内容}
4、其实匿名内部类就是一个匿名子类对象。
示例代码:
package com.abin;
interface inner{
void method();
}
class OuterA{
static inner show(){
return new inner()
{
@Override
public void method()
{
System.out.println("method:嘿,陈从宾我是你定义的匿名内部类中的方法");
}
};
}
}
public class InnerClass2
{
public static void main(String[]
args) {
OuterA.show().method();
show(new inner()
{
@Override
public void method()
{
System.out.print("method:嘿,陈从宾你以接口作为参数成功¡¤¡¤¡¤");
}
});
}
public static void show(inner
in) {
in.method();
}
}
一、内部类的访问规则。
1、 内部类可以直接访问外部类的成员,包括私有成员,原因是:内部类中持有一个外部类的引用,格式为:外部类名.this。
2、 外部类访问内部类必须建立内部类对象。
3、 当内部类定义在直接外部类的成员位置上,而且是非私有成员,可以在间接外部类中引用内部类,其格式为:直接外部类名.内部类名 对象名=
new直接外部类构造函数名.new 内部类构造函数名,形如Outer.Inner
inner = new Outer().new Inner();。
4、 在成员位置上的内部类可以被可以被成员修饰符修饰,比如:private
static(当内部类被其修饰,则内部类只能访问直接外部类的静态成员)等内部类相当于外部类的一个成员。内部类有static修饰时则内部类必须是static。
5、 当内部类定义在局部时,1)、不可以被成员修饰符修饰。2)、可以直接访问外部类中的成员,因为该内部类还持有外部类的引用。但不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。
实例演示:
package com.abin;
class Outer{
//定义外部内的私有成员
private int x=2;
//创建内部类
class Inner{
//定义内部类的私有成员
private int x =
4;
public void show(){
int x = 6;
System.out.println("您正在访问内部类的show()方法");
System.out.println("在内部类Inner的方法show()中调用方法内部成员x="+x);
System.out.println("在内部类Inner的方法show()中调用内部类私有成员x="+this.x);
System.out.println("在内部类Inner的方法show()中调用外部类的私有成员x="+Outer.this.x);
}
}
public void show(){
System.out.println("您正在访问外部类的show()方法");
//在外部类中访问内部类需要建立内部类的对象
Inner inner = new Inner();
inner.show();
}
}
public class InnerClass
{
public static void main(String[]
args) {
//实例化外部类
Outer outer = new Outer();
//调用外部类方法
outer.show();
//直接实例化内部类
Outer.Inner inner = new Outer().new Inner();
System.out.println("通过内部类实例化的对象调用内部类方法show():");
inner.show();
}
}
二、匿名内部类
1、匿名内部类其实就是内部类的简写格式。
2、定义内部类的前提:内部类必须是继承一个类或者实现接口。
3、匿名内部类的格式:new 父类或者接口名(){定义子类的内容}
4、其实匿名内部类就是一个匿名子类对象。
示例代码:
package com.abin;
interface inner{
void method();
}
class OuterA{
static inner show(){
return new inner()
{
@Override
public void method()
{
System.out.println("method:嘿,陈从宾我是你定义的匿名内部类中的方法");
}
};
}
}
public class InnerClass2
{
public static void main(String[]
args) {
OuterA.show().method();
show(new inner()
{
@Override
public void method()
{
System.out.print("method:嘿,陈从宾你以接口作为参数成功¡¤¡¤¡¤");
}
});
}
public static void show(inner
in) {
in.method();
}
}
相关文章推荐
- 匿名内部类学习笔记InnerClassTest.java
- 3.java面向对象语法学习(部分2-抽象类,接口,内部类)
- 黑马程序员_Java学习日记第三天-多态、内部类、异常处理
- 黑马程序员—java基础学习--Object类,内部类
- Java学习笔记(七):内部类、静态类和泛型
- java学习笔记(六)之匿名内部类
- java学习之旅51--面向对象_24_内部类详解
- JAVA匿名内部类的学习
- java 内部类学习
- java学习3--Java 中包的概念,类的说明符与内部类
- [core java学习笔记][第六章接口与内部类]
- java学习路线__面向对象__内部类的定义与使用__8
- 【Java学习笔记之二十六】深入理解Java匿名内部类
- java学习之一:内部类和final
- Java 基础巩固:内部类的字节码学习和实战使用场景
- Java基础学习第十天——修饰符与内部类
- 【Java学习笔记】object,内部类,形参和返回值问题
- Java学习笔记二十:Java中的内部类
- Java学习笔记【内部类】
- 【java】内部类学习