public class OuterClass
{
private static int i = 1;
private int j = 2;
private int k = 3;
private int p = 9;
public OuterClass()
{
//InterClass ic = new InterClass();
System.out.println("外部类");
}
public static void out_f1()
{
//
System.out.println("外部类的静态方法");
}
public void out_f2()
{
//
System.out.println("外部类的非静态方法");
}
/**
* 外部类的非静态方法 访问成员内部类
*/
public void out_f3()
{
Inner_Member im = new Inner_Member();
im.inner_f1();
}
/**
* 外部类的静态方法访问成员内部类,与在外部类外部访问成员内部类一样
* 步骤1:建立外部类对象
* 步骤2:根据外部类对象建立内部类对象
* 步骤3:访问内部类的方法
*/
public static void out_f4()
{
OuterClass oc = new OuterClass();//外部类对象
Inner_Member im = oc.new Inner_Member();//内部类对象
im.inner_f1();
}
public static void main(String[] args)
{
OuterClass oc = new OuterClass();//外部类对象
out_f4();
System.out.println("-------------------成员内部类-------------------------------");
oc.out_f5(10);
System.out.println("-------------------局部内部类-------------------------------");
oc.out_f6();
System.out.println("--------------------静态内部类------------------------------");
System.out.println("---------------------匿名内部类-----------------------------");
}
/**1.成员内部类
* 即作为外部类的一个成员存在,与外部类的属性、方法并列。
*
* 注意:成员内部类中不能定义静态变量,但可以访问外部类的所有成员。
*
* 成员内部类的优点:
* ⑴ 内部类作为外部类的成员,可以访问外部类的私有成员或属性。(即使将外部类声明为PRIVATE,但是对于处于其内部的内部类还是可见的。)
* ⑵ 用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的private还要小的访问权限。
*/
private class Inner_Member
{
int t = 12;
int j = 11;
//static int p = 5;//成员内部类中不能定义静态变量
public Inner_Member ()
{
System.out.println("成员内部类");
}
void inner_f1()
{
System.out.println("外部变量 "+k);//外部类的变量如果和内部类的变量没有同名的,则可以直接使用变量名访问外部类的变量
System.out.println("外部变量 "+OuterClass.this.i);
System.out.println("外部变量 "+i);
System.out.println("外部变量 "+OuterClass.this.j);//访问外部类中与内部类同名的变量可用'外部类名.this.变量名'
System.out.println("内部变量 "+j);//在内部类中访问内部类自己的变量直接使用变量名
System.out.println("内部变量 "+this.j);//也可以使用‘this.变量名’来访问内部类自己的变量
System.out.println("内部变量 "+t);
out_f1();
out_f2();
}
}
/**2.局部内部类
* 即在方法中定义的内部类,与局部变量类似,在局部内部类前不加修饰符public或private,其范围为定义它的代码块
* 注意:①局部内部类中不可定义静态变量
* ②可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的
*
*/
public void out_f5(int k)
{
final int s = 100;
int f_i = 300;
final int j = 200;
class Inner_part
{
int s = 21;
int p = 29;
//static int m = 20;//不可以定义静态变量
Inner_part(int k)
{
inner_f(k);
}
int inner_i = 22;
void inner_f(int k)
{
System.out.println("外部类的实例变量 :"+i);//如果内部类没有与外部类同名的变量,在内部类中可以直接访问外部类的实例变量
System.out.println("外部类的局部变量 :"+s);//可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的
//System.out.println("外部类的局部变量 :"+f_i);
System.out.println("内部类的变量 :"+p);//如果内部类中有与外部类同名的变量,直接用变量名访问的是内部类的变量
System.out.println("内部类的变量 :"+this.p);//用"this.变量名" 访问的也是内部类变量
System.out.println("外部类的变量 :"+OuterClass.this.p);//用外部"外部类类名.this.变量名" 访问的是外部类变量
// OuterClass oc = new OuterClass();
// System.out.println("外部类的变量 :"+oc.p);//如果内部类所在方法是静态方法,访问外部类变量需要创建外部类对象
System.out.println("参数 :"+k);
}
}
new Inner_part(k);
}
/**3.静态内部类
* 静态内部类定义在类中,任何方法外,用static定义
* 静态内部类可以用public,protected,private修饰
*注意:静态内部类中可以定义静态或者非静态的成员
*/
private static class Inner_Static
{
static int k = 31;
int j = 32;
public Inner_Static()
{
System.out.println("静态内部类");
}
static void inner_f1()
{
System.out.println("访问外部类的变量:"+i);//静态内部类只能直接访问外部类的静态成员
// System.out.println("访问内部类的变量:"+k);
// System.out.println("访问外部类的变量:"+);
// System.out.println("访问外部类的变量:"+k);
out_f1();//包括静态变量和静态方法
// out_f2();//静态内部类不能直接访问非静态变量和非静态方法,需创建外部类对象访问
OuterClass oc = new OuterClass();
oc.out_f2();
}
void inner_f2()
{
//
}
}
/**
* 外部类访问静态内部类,对于其静态成员可以直接用内部类名访问,对于非静态成员需要实例化内部类
*/
public void out_f6()
{
System.out.println("外部访问静态内部类的静态变量"+Inner_Static.k);// 外部类访问内部类的静态成员:内部类.静态成员
Inner_Static.inner_f1();
//静态内部类可以直接创建类对象
Inner_Static is = new Inner_Static();// 外部类访问内部类的非静态成员:实例化内部类即可
System.out.println(is.j);
is.inner_f2();
}
/**匿名内部类
*
* 匿名内部类是一种特殊的局部内部类,它是通过匿名类实现接口
*
* 匿名内部类的特点:
* 1,一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的事先或是覆盖。
* 2,只是为了获得一个对象实例,不需要知道其实际类型。
* 3,类名没有意义,也就是不需要使用到。
*
* 注:一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类,没有类名,根据多态,
* 我们使用其父类名。因他是局部内部类,那么局部内部类的所有限制都对其生效。匿名内部类是唯一一
* 种无构造方法类。大部分匿名内部类是用于接口回调用的。匿名内部类在编译的时候由系统自动起名Out$1.class。
* 如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。因匿名内部类无构造方法,
* 所以其使用范围非常的有限。当需要多个对象时使用局部内部类,因此局部内部类的应用相对比较多。
* 匿名内部类中不能定义构造方法。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。
*/
//具体实现一般是窗口监听时使用
/*
*
* void init(){
p.add(yellow);
p.add(blue);
p.add(red);
f.add(p);
f.setSize(400, 300);
f.setTitle("ActionDemo");
f.setVisible(true);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
f.setVisible(false);
f.dispose();
System.exit(0);
}
});
yellow.addActionListener(new ButtonAction(Color.yellow));
blue.addActionListener(new ButtonAction(Color.BLUE));
red.addActionListener(new ButtonAction(Color.RED));
}
*/
}
分享到:
相关推荐
内部类可以分为四类:成员内部类、局部内部类、匿名内部类和静态内部类。在这里,我们重点关注成员内部类和静态内部类。 成员内部类,就像它的名字一样,是类的一个成员,与字段和方法处于同一级别。它可以访问外部...
### 浅谈Java内部类的四个应用场景 #### 一、引言 在Java语言中,内部类(Inner Class)作为一种特殊的存在,为开发者提供了更为灵活的面向对象编程方式。通过本文,我们将深入探讨Java内部类的四个典型应用场景,...
2. 多功能车(MPV):通常源自轿车平台,具有宽敞的内部空间,适合多人乘坐,兼顾舒适性和实用性。 3. 运动型多用途车(SUV):结合了越野车的通过性和轿车的舒适性,通常具有四驱系统,强调驾驶乐趣和多功能性。 ...
缓存是一类快速存储设备,它位于处理器和主存(主内存)之间。缓存的主要功能是存储处理器经常使用的指令和数据。由于CPU执行速度远快于主存存取速度,为了减少处理器因等待数据而空闲的时间,缓存被用来暂存这些...
Java静态内部类详解 Java中的内部类是指在一个类中定义的另一个类,它可以帮助我们更好地组织代码,使代码更加简洁和易于维护。在Java中,内部类可以分为静态内部类和非静态内部类两种。本文将主要介绍Java静态内部...
白盒测试关注内部设计和程序实现,依据设计文档进行,常用于单元测试阶段。黑盒测试则关注输入输出,依据需求文档进行,适用于系统测试和验收测试。此外,还有单元测试、集成测试、系统测试和验收测试四个阶段,它们...
在管理咨询行业中,员工的能力和积极性...总的来说,管理咨询类公司建立有效激励制度需综合考虑员工需求、公司目标和市场环境,通过多元化、公平透明的手段,不断优化激励策略,以达到提升员工满意度和公司绩效的目标。
封装是面向对象设计的一个基本原则,指的是将数据和操作数据的方法封装在一个单一的单元(类)中,对外部隐藏对象的内部细节。这种机制保护了数据的完整性和安全性,同时也简化了对象之间的交互。 #### 4. 继承...
3. **电缆压缩**:使用扎线带固定电缆时,力度不宜过大,以免造成线缆内部绞线的变形。扎线带的紧度只需足够支撑电缆即可。 4. **电缆重量**:六类线通常比五类线重,因此在悬挂布线时,必须考虑电缆的自重,避免因...
### 浅谈VC++中滚动条的编程 #### 引言 VC++作为一种功能强大且复杂的可视化编程工具,被广泛应用于软件开发领域。对于初学者而言,掌握VC++及其内部的MFC(Microsoft Foundation Classes)基础类库并不容易,尤其...
"医疗建筑中心消毒供应室给排水设计浅谈" 本文通过对医疗建筑中心消毒供应室给排水设计的浅谈,旨在为医疗建筑中心消毒供应室的设计提供理论依据和设计指南。医疗建筑中心消毒供应室是医院中的一种特殊区域,对给...
浅谈机器学习与深度学习的概要及应用 机器学习和深度学习是人工智能的两个重要分支领域。机器学习是指在没有明确的设定情况下,使计算机具有学习能力的研究领域。深度学习是机器学习的一个子类,可以把它看作一种...
### 浅谈FPGA/CPLD的复位电路设计 #### 摘要 本文将深入探讨FPGA/CPLD中的复位电路设计问题。复位电路是集成电路设计中的一个重要组成部分,它确保了系统能够在启动时处于一个已知的稳定状态。文章首先介绍了复位的...
文章《浅谈数据结构课程教学内容的联系.pdf》探讨了数据结构课程与图书馆信息资源共享之间的关系,以及计算机网络技术在图书馆信息资源共享中的应用。文章首先分析了资源共享在图书馆中的重要性,随后详细介绍了...
浅谈网络安全的重要性全文共3页,当前为第1页。浅谈网络安全的重要性全文共3页,当前为第1页。网络安全 浅谈网络安全的重要性全文共3页,当前为第1页。 浅谈网络安全的重要性全文共3页,当前为第1页。 ——浅谈网络...
例如,有些方法体内部存在语法错误或缺少必要的代码块。在实际应用中,需要对这些方法进行修正和补充以确保代码能够正常工作。 总结起来,这篇文档展示了如何利用PHP语言来构建一个简单的MySQL操作类,实现了基本的...
Java反射技术浅谈 Java反射技术是一种可以访问、检测和修改程序本身状态或行为的能力。通过反射,Java程序可以加载一个运行时才知道名称的类,得到其完整内部信息,并创建其对象,或对其属性设值,或调用其方法。...
面载荷可以施加在模型的线、面或实体上,并通过内部算法传递给各个单元。例如,在模拟一个块体顶部受到的压力时,就可以将该压力视为面载荷。正确使用面载荷对于预测结构在压力作用下的行为至关重要。 通过对模具...