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

    本文转自:https://www.cnblogs.com/shen-hua/p/5440285.html

    成员内部类

    特征:

    1. 作为外部类的一个成员存在,与外部类的属性、方法并列

    2. 成员内部类持有外部类的引用(能直接使用外部类的方法、属性

    3. 成员内部类中不能定义static变量和方法

    使用格式:

    Outer outer = new Outer();
    Outer.Inner inner = outer.new Inner();//写法有点儿奇怪...

    实例:

    /*
     * 成员内部类
     */
    public class Body {
        String arm;
        String leg;
        String blood;
        public Body(String arm, String leg, String blood) {
            super();
            this.arm = arm;
           this.leg = leg;
            this.blood = blood;
        }
        //成员内部类Heart
        class Heart{
            String name;
             void work() {
                System.out.println("心脏正在给"+arm+leg+"输"+blood);
            }
         };
    }
    public class Test {
        public static void main(String[] args) {       
            Body body=new Body("两个胳膊","两条腿","血");
            Body.Heart  heart=body.new Heart();
            heart.work();
        }
    }

    ---------------------------------------------------------------------------------------------------------

    静态内部类

    特征:

    1. 静态内部类不会持有外部类的引用,如果访问外部类的成员变量必须通过外部类的实例访问

    2. 静态内部类可以访问外部的静态变量,(就好比静态方法只能调用静态方法,访问静态变量)

    3. Java中只有内部类才可以是静态类

    使用格式:

    Outer.Inner inner = new Outer.Inner();

    实例:

    /*
     * 静态内部
     */
    public class Company {
        String companyNam;
        static String country;
        static class Clear{
            String name;
            public Clear() {
                // TODO Auto-generated constructor stub
            }
            
            public Clear(String name) {
                super();
                this.name = name;
            }
    
            public void work(String name){
                String na=new Company().companyNam="联想";
                country="中国";
                System.out.println(name+"为"+na+"打扫卫生,该公司属于"+country);
            }
        }
    }
    public class Test {
        public static void main(String[] args) {
            Company.Clear zcl=new Company.Clear();
            zcl.work("shen_hua");
        }
    
    }

    ---------------------------------------------------------------------------------------------------------

    局部内部类

    特征:

    1. 用在方法内部,作用范围仅限于该方法中

    2. 根据情况决定持有外部类对象引用

    3. 不能使用private,protected,public修饰符

    4. 不能包含静态成员

    5. 只有在方法的局部变量被标记为final或局部变量是effctively final的,内部类才能使用它们

    实例:

    /*
     * 局部内部类
     */
    public class School {
    
        String schoolName;
        String buss="培养人才";
        int studentNum;
        public School() {
            // TODO Auto-generated constructor stub
        }
        
        public School(String schoolName, String buss, int studentNum) {
            super();
            this.schoolName = schoolName;
            this.buss = buss;
            this.studentNum = studentNum;
        }
    
        //宣传
        public void show(){
            final double tvMoney=10000;
            final double netMoney=20000;
            class AdverTeam{
                String teamName="shen_hua";
                //电视宣传
                public void tvShow(){
                    System.out.println("宣传队是:"+teamName);
                    System.out.println("这是电视宣传,学校名称"+schoolName+",业务内容:"+buss+",学校人数:"+studentNum+",宣传所需费用"+tvMoney);
                }
                //网络宣传
                public void netShow(){
                    System.out.println("宣传队是:"+teamName);
                    System.out.println("这是网络宣传,学校名称"+schoolName+",业务内容:"+buss+",学校人数:"+studentNum+",宣传所需费用"+netMoney);
                }
            }
            new AdverTeam().tvShow();
            new AdverTeam().netShow();
        }
    }
    public class Test {
        public static void main(String[] args) {
            School qinghua=new School("清华","互联网培训",1000);
            
            qinghua.show();
        }
    }

    ---------------------------------------------------------------------------------------------------------

    匿名内部类

    特征:

    1. 使用new创建没有具体位置

    2. 创建的匿名类,默认继承或实现new后面的类型

    3. 根据使用情况决定是否持有外部类对象引用

    4. 内嵌匿名类编译后生成的.class文件的命名方式是”外部类名称$编号.class”,编号为1,2,3…n,编号为x的文件对应的就是第x个匿名类

    /*
     * 匿名内部类
     */
    public interface Person {
        public void run();
    }
    /*
     * 测试类
     */
    public class Test {
        public static void main(String[] args) {
            Person p=new Person() {  //匿名内部类,实现Person接口      
                public void run() {
                    System.out.println("匿名内部类实现的");
                }
            };
            p.run();
        }
    
    }
  • 相关阅读:
    无服务计算应用场景探讨及 FaaS 应用实战
    从零入门 Serverless | Serverless 应用如何管理日志 & 持久化数据
    实验楼流程
    go beego框架与python实现数据交互
    golang 并发运算时主线程先运行完,子线程运行没结束的问题记录
    滑动窗口解决最小子串问题 leetcode3. Longest Substring Without Repeating Characters
    golang 遍历树状结构
    golang 三维向量相关操作
    golang 矩阵乘法、行列式、求逆矩阵
    golang float32/64转string
  • 原文地址:https://www.cnblogs.com/yanze/p/9928359.html
Copyright © 2011-2022 走看看