java内部类用法解析

定义:一个类的定义放在另一个类的内部,这个类就叫做内部类。
java内部类分为:成员内部类、方法内部类、静态内部类、嵌套类。

package com.hmkcode;

/**
* 成员内部类用法
* 1链接到外部类: 创建了内部类对象时,它会与创造它的外围对象有了某种联系,于是能访问外围类的所有成员,不需任何特殊条件。
* 2内部类可以使用外部类的成员实现:用外部类创建内部类对象时,此内部类对象会秘密的捕获一个指向外围类的引用.于是,可以通过这个引用来访问外部类的成员。
* 3创建内部类对象时,必须与外围类对象相关联。(嵌套类除外)
*/
public class MemberInnerClass
{
//定义外部类成员变量outerNum
private int outerNum;

//外部类无参构造器
public MemberInnerClass(){}

//外部类有参构造器
public MemberInnerClass(int outerNum)
{
this.outerNum = outerNum;
}

//声明一个外部类方法
public void outerFunction(){
System.out.println("outerNum:"+outerNum);
}

//得到内部类的实例
public Inner getInner(int innerNum){
return new Inner(innerNum);
}

public class Inner
{
//定义内部类成员变量innerNum
private int innerNum;

//内部类无参构造器
public Inner(){}

//内部类有参构造器
public Inner(int innerNum)
{
this.innerNum = innerNum;
}

//使用.this得到外部类对象的引用
public MemberInnerClass getThisMemberInsideClass()
{
return MemberInnerClass.this;
}

//使用.new得到外部类对象的引用
public MemberInnerClass getNewMemberInsideClass()
{
return new MemberInnerClass();
}

//调用外部类MemberInsideClass的方法outerFunction
public void getOuterNum()
{
outerFunction();
}

//调用外部类MemberInsideClass的成员变量outerNum
public void getOuterNum1(){
System.out.println("outerNum:"+MemberInnerClass.this.outerNum);
}

//输出内部类的成员变量innerNum
public void getInnerNum(){
System.out.println("innerNum:"+innerNum);
}
}


public static void main(String[] args)
{
//实例化一个外部类
MemberInnerClass outer = new MemberInnerClass(5);
//通过外部类的对象来创建一个内部类的对象
MemberInnerClass.Inner inner = outer.new Inner(6);
//通过调用外部类的方法outerFunction输出成员变量outerNum
inner.getOuterNum();
//直接调用外部类MemberInsideClass的成员变量outerNum
inner.getOuterNum1();
//获取指向内部类的一个引用,调用内部类的方法getInnerNum()输出内部类的成员变量innerNum
outer.getInner(6).getInnerNum();
}

}

方法内部类用法解析

package com.hmkcode;

/**
* 方法内部类调用解析
* 1:方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化。
* 2:方法内部类对象不能使用该内部类所在方法的非final局部变量。
* 3:方法内部类不能定义修饰符。
* 因为方法的局部变量位于栈上,只存在于该方法的生命期内。当一个方法结束,其栈结构被删除,局部变量成为历史。
* 但是该方法结束之后,在方法内创建的内部类对象可能仍然存在于堆中!例如,如果对它的引用被传递到其他某些代码,
* 并存储在一个成员变量内。正因为不能保证局部变量的存活期和方法内部类对象的一样长,所以内部类对象不能使用它们。
*/
public class MethodInnerClass {
//定义一个final的成员常量str
private final String str = "test";

//定义外部类方法doSomeing,在此方法中定义内部类Inner
public void doSomeing(){
//定义一个final的成员常量num
final int num = 10;
//定义一个成员变量count
int count;
class Inner
{
//输出外部类的成员常量num
public void getOuterField()
{
System.out.println(num);
}

//调用外部类的成员方法getStr
public void getOuterMethod(){
getStr();
}

//内部类不能使用方法的变量count
public void getOuterCount(){
//System.out.println(count);
}
}
//创建内部类的一个实例
Inner inner = new Inner();
inner.getOuterField();
inner.getOuterMethod();
}

//定义外部类方法getStr
public void getStr(){
System.out.println("str:"+str);
}

public static void main(String[] args) {
//创建外部类MethodInnerClass的实例
MethodInnerClass outer = new MethodInnerClass();
//调用自己的成员方法
outer.doSomeing();
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值