25、面向对象10 内部类

本文详细介绍了Java中的内部类,包括成员内部类、静态内部类、局部内部类和匿名内部类。通过示例展示了如何访问外部类的字段和方法,并解释了内部类在实际编程中的应用场景。同时,还探讨了静态内部类和局部内部类的特点,以及匿名内部类在简化代码和实现接口快速实现上的优势。
摘要由CSDN通过智能技术生成

内部类

  • 内部类就是在一个类的内部再定义一个类,比如在A类中有定义了一个B类,那么B类相对于A类来说就是内部类,而A类相对于B类就是外部类

  1. 成员内部类

  2. 静态内部类

  3. 局部内部类

  4. 匿名内部类

内部类访问外部类的字段:外部类类名.this.字段

内部类访问外部类的方法:外部类类名.this.方法

内部类访问内部类字段:this.字段

内部类访问内部类方法:this.方法

  • 成员内部类

package OOP.InnerClass;
​
//外部类
public class Outer {
    private int id = 101;
    public void out(){
        System.out.println("这是外部类的方法");
    }
​
    //成员内部类
    public class Inner{
        public void in(){
            System.out.println("这是内部类的方法");
        }
​
        //内部类可以访问外部类的一些私有属性和方法
        public void get(){
            //可以访问外部类的私有属性
            System.out.println(id);
            //可以访问外部类的方法
            Outer outer = new Outer();
            outer.out();
        }
    }
}
package OOP.InnerClass;
​
public class Application {
    public static void main(String[] args) {
        //外部类实例化
        Outer outer = new Outer();
​
        //通过外部类的实例来实例化内部类
        Outer.Inner inner = outer.new Inner();
        inner.in();
​
        //内部类可以直接访问外部类的私有属性和方法
        inner.get();
    }
}
​
//结果
D:\JDK\bin\java.exe "-javaagent:D:\IDEA\IntelliJ IDEA 2022.2.3\lib\idea_rt.jar=26331:D:\IDEA\IntelliJ IDEA 2022.2.3\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath D:\eclipse\work\Demo1\out\production\untitled1 OOP.InnerClass.Application
这是内部类的方法
101
这是外部类的方法
​
进程已结束,退出代码0
  • 静态内部类

  • 局部内部类(写在方法里面的类)

package OOP.InnerClass;
​
//外部类
public class Outer {
    //方法
    public void A(){
        
        //局部内部类
        class Inner{
            //里面也可以写一些方法,但不建议这样写
            public void fin(){
                
            }
        }
    }
}
  • 匿名内部类

package OOP;
​
public class test {
    public static void main(String[] args) {
        //正常情况下的实例化对象,这个对象的名字就是apple
        Apple apple = new Apple();  
        
        //何为匿名:就是没有名字初始化类,不用把实例保存在变量中,此时我们依然可以调用eat方法
        new Apple().eat();
        
        //new接口
        UserService userService = new UserService() {
            @Override
            public void Hello() {
                System.out.println("Hello");
            }
        };
​
    }
    
}
class Apple{
    public void eat(){
        System.out.println("XDDA");
    }
}
//定义一个接口
interface UserService{
    void Hello();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值