zoukankan      html  css  js  c++  java
  • Java 内部类

    ## 内部类

    内部类就是在一个类的内部再定义一个类。如:

    Class A {
        Class B{
            
        }
    }
    

    A 是 B 的外部类,B 是 A 的内部类

    成员内部类

    public class Outer {
        private int id ;
        public  void out() {
            System.out.println("外部类的方法");
        }
        
    	// 成员内部类
        public class Inner {
            public  void inner() {
                System.out.println("内部类的方法");
            }
    
            // 可以直接使用外部类的属性/方法
            public void getOuterId(){
                System.out.println("内部类调用外部类属性和方法");
                // 创建成员内部类之前肯定要创建外部类对象
                // 即使id不是静态变量、out不是静态方法,但创建外部类对象时已经存在。
                System.out.println(id);
                out();
            }
        }
    }
    

    image-20200512155751798

    静态内部类

    看到静态二字难免想起 static,没错!在成员内部类的基础上添加static修饰符,内部类即成为静态内部类

    image-20200512155922614

    此时,静态内部类与外部类一起加载,所以不能调用非静态的属性和方法!

    public class Outer {
        private int id ;
        public void out() {
            System.out.println("外部类的方法");
        }
    
        public static void outStatic() {
            System.out.println("外部类的静态方法");
        }
    
        // 静态内部类
        public static class Inner {
            public void inner() {
                System.out.println("内部类的方法");
            }
    
            // 可以直接使用外部类的 静态!! 属性/方法
            public void getOuterId(){
                System.out.println("内部类调用外部类 静态!! 属性和方法");
                outStatic();
            }
        }
    }
    

    image-20200512160516325

    局部内部类

    局部内部类与局部变量类似,在方法中声明

    public class Outer {
    
        public void out() {
            System.out.println("进入外部类的方法");
            // 局部内部类
            class Inner {
                public void inner() {
                    System.out.println("局部内部类与局部变量类似,在方法中声明");
                }
            }
    
            Inner inner = new Inner();
            inner.inner();
        }
    }
    

    image-20200512161410153

    匿名内部类

    public class Application {
        public static void main(String[] args) {
            // 匿名内部类在多线程中的使用,到时候再深究
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    System.out.println("匿名内部类实现线程的逻辑操作");
                }
            });
            // 开启线程
            thread.start();
        }
    }
    

    源文件声明规则

    在本节的最后部分,我们将学习源文件的声明规则。当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则。

    • 一个源文件中只能有一个public类
    • 一个源文件可以有多个非public类
    • 源文件的名称应该和public类的类名保持一致。例如:源文件中public类的类名是Employee,那么源文件应该命名为Employee.java。
    • 如果一个类定义在某个包中,那么package语句应该在源文件的首行。
    • 如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么import语句应该在源文件中最前面。
    • import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。

    类有若干种访问级别,并且类也分不同的类型:抽象类和final类等。这些将在访问控制章节介绍。

    除了上面提到的几种类型,Java还有一些特殊的类,如:内部类、匿名类。

  • 相关阅读:
    【Nginx】--Linux服务器中配置Nginx一个域名访问多个项目
    【node】-- express 热部署,修改不重新启动
    typora快捷键
    简单工厂模式
    软件设计七大原则
    Spring:事务的传播行为
    Spring:MVC执行流程
    Spring:beanfactory中循环依赖和命名重复
    Spring:MVC启动时的WebApplicationContext的关系
    Spring:如何实现注解的组合
  • 原文地址:https://www.cnblogs.com/1101-/p/12882821.html
Copyright © 2011-2022 走看看