内部类和外部类

本文深入讲解了Java内外部类的概念及使用方式。介绍了内部类如何访问外部类的成员,并展示了如何在外部类中实例化并使用内部类。此外,还讨论了内部类与外部类成员重名时的解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于内、外部类可能有很多人会不清楚,这一篇主要是讲解内部类的问题:
内部类

在一个类的内部定义的类,叫内部类,包含内部类的类叫外部类

1、内部类可以声明为public、private、protected、默认

2、内部类可以申明为static

内部类可以直接调用外部类的所有方法以及属性(不管是不是private),外部类也可以直接调用内部类的属性和方法

如:InnerClass是定义在OutterClass内部的类

    public class OutterClass {
    private int t = 100;

    private InnerClass inner;

    private void test() {
        System.out.println(t);
        inner = new InnerClass();
        //调用内部类的属性和方法
        inner.name = "Hello";
        inner.testIn();
    }
外部类
/**
 * 定义在其他类内部的类,就叫外部类
 * 
 * @author 却是凡
 */
private class InnerClass {
    private String name;
    private int t = 10;

    private void abc() {
        System.out.println("inner class"+OutterClass.this.t);
    }

    private void testIn(){
        //调用外部类的方法
        test();
        }
}

注意:如果内部类中存在属性和外部类属性一样的情况,内部类需要调用外部类的属性需要在属性前加上 外部类.this

OutterClass.this.t

以上就是关于内和外部类的详细解析。

内部类外部类有同名函数时,这种情况可能会导致一些混淆。下面详细介绍它们的工作机制以及如何处理这种场景。 ### 内部类外部类同名函数 #### 1. 基本概念 - **外部类**:是直接定义在源文件中的。 - **内部类**:是在一个的内部定义的另一个,可以访问该外部类的所有成员(包括私有的)。 如果内两个中有相同的函数名称,并不会引起冲突,因为它们属于不同的命名空间。然而,在实际编码过程中确实有可能会遇到需要明确定调用哪一个的情况。 #### 2. 访问规则 当你从内部类中尝试访问名为`method()`的方法时,默认情况下它将查找并优先考虑自身具有的这个方法;只有当内层找不到对应的方法才会向寻找直至最层或抛出异常。 如果你想显式地调用外部类里的那个同名字的方法,则可以通过使用 `OuterClassName.this.methodName();` 的形式来做到这一点。 ```java public class OuterClass { public void show() { System.out.println("This is outer method."); } class InnerClass { public void show() { // 显示当前内部类的信息 System.out.println("This is inner method."); // 调用外部类的方法 OuterClass.this.show(); } } } ``` 在这个例子中,当我们创建了一个`InnerClass`的对象并且调用了它的`show()`方法后,首先打印的是"这是内部的方法."然后通过`OuterClass.this.show();`这行代码实现了对外部类`show()`方法的成功调用,结果将会显示 "这是部的方法." #### 3. 注意事项 虽然理论上允许存在这样的结构,但在实践中最好避免这样做以保持代码清晰度。良好的实践建议尽量给每个方法赋予唯一而有意义的名字以便于理解维护程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值