• Java入门篇 之 内部类


    本篇碎碎念:本篇没有碎碎念,想分享一段话:

    你不笨,你只是需要时间,耐心就是智慧,不见得快就好,如果方向都不对,如果心术不正,如果德不配位,快就是对自己天分的一种浪费,不要急躁,慢慢来就很快。

    -----董宇辉

    今日份励志文案:  To best is yet to come 未来可期

    少年乘风,必会展翅翱翔!!!

    目录

     内部类

    下面的图片表示的是静态内部类 

    下面的图片是实例内部类 

     完整的举例代码

    匿名内部类 

    String类 


     内部类

    可以将一个类的定义放在另一个类的定义内部,这就是内部类

    内部类是一种非常有用的特性,因为它允许你把一些逻辑相关的类组织在一起,并控制位于内部的类的可视性,内部类和组合是完全不同的概念

    博主认为,内部类可能看起来会比较奇怪(仅限个人想法)

    创建内部类

    创建内部类的方式就是把类的定义置于外围类的里面:

    1. class OuterClass {
    2. public int date1 = 1;
    3. private int date2 = 2;
    4. public static int date3 = 3;
    5. //被static修饰的类就是静态内部类
    6. //static class InnerClass
    7. //没有被static修饰的叫做实例内部类或分非静态内部类
    8. class InnerClass {
    9. public int date4 = 4;
    10. private int date5 = 5;
    11. //常量是在编译的时候确定的
    12. //final常量
    13. //实例内部类中可以定义一个静态成员变量
    14. //但是这个变量必须是常量
    15. public static final int date6 = 6;
    16. }
    17. }

    下面的图片表示的是静态内部类 

     在输出System.out.println(date1)中报错,正确的写法下面也已经给出

    在外部类中可以直接定义,但是在外部类之外就不可以,需要把外部类名加上

    1. public void func() {
    2. //如果定义了一个方法,在方法里可以直接实例化静态内部类的对象
    3. InnerClass innerClass = new InnerClass();
    4. innerClass.test();
    5. }

    下面的图片是实例内部类 

    1. //常量是在编译的时候确定的
    2. //final常量
    3. //实例内部类中可以定义一个静态成员变量
    4. //但是这个变量必须是常量
    5. public static final int date6 = 6;

     用final修饰,这是规定!!!

     完整的举例代码

    1. //静态内部类代码
    2. //外部类
    3. class OuterClass {
    4. public int date1 = 1;
    5. private int date2 = 2;
    6. public static int date3 = 3;
    7. //被static修饰的类就是静态内部类
    8. //没有被static修饰的叫做实例内部类或分非静态内部类
    9. static class InnerClass {
    10. //优先在自己的地盘找,找到就访问自己的
    11. public int date1 = 11111;
    12. public int date4 = 4;
    13. private int date5 = 5;
    14. //常量是在编译的时候确定的
    15. //final常量
    16. //实例内部类中可以定义一个静态成员变量
    17. //但是这个变量必须是常量
    18. public static final int date6 = 6;
    19. public void test() {
    20. //date是属于外部类对象的成员,得对外部类的引用访问date1
    21. OuterClass date = new OuterClass();
    22. System.out.println(date1);
    23. System.out.println(this.date1);
    24. System.out.println(this.date1);
    25. System.out.println(date.date1);
    26. System.out.println(date.date2);
    27. System.out.println(date4);
    28. System.out.println(date5);
    29. System.out.println(date6);
    30. }
    31. }
    32. public void func() {
    33. //如果定义了一个方法,在方法里可以直接实例化静态内部类的对象
    34. InnerClass innerClass = new InnerClass();
    35. innerClass.test();
    36. }
    37. }
    38. public class demo9 {
    39. public static void main(String[] args) {
    40. OuterClass out = new OuterClass();
    41. out.func();
    42. //以下两种写法一样
    43. //第一张写法看着比较怪,就是通过外部类引用去调用的InnerClass
    44. //OuterClass.InnerClass a=out.new InnerClass();
    45. //OuterClass.InnerClass b=new OuterClass().new InnerClass();
    46. // a.test();
    47. //b.test();
    48. //如果在外部类之外就不可以直接实现了
    49. /* OuterClass.InnerClass innerClass = new OuterClass.InnerClass();
    50. innerClass.test();
    51. System.out.println("----我是分界线-----");
    52. OuterClass innerClass1=new OuterClass();
    53. innerClass1.func();
    54. */
    55. }
    56. }

    打印结果! 

    匿名内部类 

    1. interface InterFaceA{
    2. //定义接口
    3. public void func();
    4. }
    5. class TestA implements InterFaceA{
    6. @Override
    7. public void func() {
    8. System.out.println("重写的func");
    9. }
    10. }
    11. public class demo11 {
    12. public void func(){
    13. System.out.println("func");
    14. }
    15. public static void main(String[] args){
    16. TestA testA=new TestA();
    17. System.out.println("==========");
    18. //接口引用,引用这个东西,{}里面的就是匿名内部类
    19. InterFaceA a =new InterFaceA(){
    20. @Override
    21. public void func() {
    22. System.out.println("阿巴阿巴");
    23. }
    24. };
    25. a.func();
    26. testA.func();
    27. }
    28. public static void main1(String[] args){
    29. demo11 demo=new demo11();
    30. new demo11();//匿名对象,这个对象没有名字
    31. demo.func();//只实例化了一个demo对象
    32. demo.func();
    33. new demo11().func();//实例化了两个demo11对象
    34. new demo11().func();
    35. //如果说,以后的场景是只使用一次对象,那么就使用内部对象
    36. }
    37. }


    如果有解释的不对或者不清晰,如果可以从评论区指出,我一定会加以修改,万分感谢

    希望对你们有所帮助

     

  • 相关阅读:
    桶排序的代码
    scrapy的入门使用
    oracle表空间释放
    二叉搜索树
    在MyBatis中,可以使用动态SQL语句来实现对数据的上移、下移和置顶操作
    分布式电源接入对配电网的影响matlab程序(IEEE9节点系统算例)
    生成式AI - 基于大模型的应用架构与方案
    求臻医学:实体肿瘤FDA/NMPA新获批抗癌药物/适应症盘点
    UI设计需要学会哪些软件?优漫动游
    构建OPC UA 可执行模型(2)
  • 原文地址:https://blog.csdn.net/2201_75886757/article/details/134536057