Demo11_内部类01

package test03_1;

public class Demo11_NeiBuLei {

public static void main(String[] args) {

// Outer out = new Outer();
// out.method();
//直接访问Outer中的inner内部类的非静态成员,创建内部类对象(内部类作为成员应该先有外部类对象,再有内部类对象)
// Outer.Inner in = new Outer().new Inner();
// in.show();
//测试static 对静态内部类中的非静态类成员进行调用
//因为内部类是静态类,所以不需要创建outer的对象,直接创建内部类对象
// Outer.Inner2 in = new Outer.Inner2();
// in.show2();
//如果静态类中有静态成员,该如何访问呢?
//既然静态内部类已经随着外部类加载,而且静态成员随着类的加载而加载
//那么就不需要对象,直接用类名调用即可
// Outer.Inner2.staticShow();
outer2 out = new outer2();
out.method();
}

}
/*
* 当A类中的内容要被 B类直接访问,而A类还需要创建B的对象,访问B的内容时,
* 这时将B类定义到A类的内部,这样访问更为便捷
*
* 将B类称之为内部类(内置类,嵌套类)。
*
* 内部类的访问方式
* 内部类可以直接访问外部类的所有成员,包含私有的
* 外部类要想访问内部类中的成员,必须创建内部类的对象
*
* 当我们描述事物时,事物的内部还有事物,这个内部的事物还在访问内部事务的内容
* 这时就将这个事物通过内部类来描述
*
* 【内部类被访问的方式】
* 1.内部类在成员位置上被访问的方式
* 成员是可以被指定的修饰符所修饰的
* public : 不多见,因为更多的时候,内部类已经被封装到了外部类中,不直接对外提供
*/
// class Outer
// {
// private static int num=4;
//
// class Inner//内部类
// {
// void show()
// {
// System.out.println(“num=”+num);
// }
// //static void staticShow(){}
// //非静态内部类中不允许定义静态成员。仅允许在非静态内部类中定义 静态常量static final int x=3;
// //如果想要在内部类中定义静态成员,必须内部类也要被静态修饰。
// }
// static class Inner2
// {
// void show2()
// {
// //System.out.println(“A=BBBBBBB”); private int num=4;
// System.out.println(“num2=”+num);
// }
// static void staticShow()//外部类一加载静态类就加载
// {
// System.out.println(“num3=”+(num+1));
// }
// }
// void method()
// {
// Inner h = new Inner();
// //内部类全名
// //Outer.Inner h = new Outer.Inner();
// h.show();
// }
// }

// //为什么内部类就能直接访问外部类的成员呢?
// //那是因为内部类中其实持有了外部类的引用 外部类.this
// //对于静态内部类不持有 外部类.this 而是直接使用 外部类名
// class outer
// {
// int num = 3 ;
// class inner
// {
// int num = 4;
// void show()
// {
// int num = 5;
// System.out.println(“num=”+num);
// System.err.println(“num=”+this.num);
// System.out.println(“num=”+outer.this.num);
// }
// }
// void method()
// {
// // System.out.println(num);
// // System.err.println(this.num);
// // System.out.println(outer.this.num);
// new inner().show();
// }
// }

//内部类其实也可以定义在外部类的局部位置上
//内部类定义在局部时,只能被访问被final修饰的局部变量 //问题1
class outer
{
int num = 3;
Object obj;
void method()
{
//final
int x=5;//局部变量
class inner//局部内部类,不能被成员修饰符修饰
{
void show()
{
System.out.println(“x=”+x);
System.out.println(“inner show run……”+num);
}
}
new inner().show();//调用才执行局部内部类
}
}
class outer2
{
int y1=3;
Object obj;
public void method()
{
@SuppressWarnings(“unused”)
int y=9;
class inner extends Object
{
public String toString()
{
return “toString”;
}
}
obj = new inner();
}
public void function()
{
System.out.println(obj.toString()+y1);
}
}
/**
*看API
*发现类名或者接口名称中有“.”说明是内部类,或者内部接口
*
*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值