java/c++中内部类、匿名类

1.java中的内部类:

class Outside{
    private String nameString ;
    private int age;
    Outside()
    {

    }
    Outside(String str_name,int int_age)
    {
        nameString=str_name;
        age=int_age;
    }

    class Inside
    {
        private String address;
        Inside()
        {

        }
        Inside(String str_addr)
        {
            address=str_addr;
        }

        void getInfo()
        {
            System.out.println("姓名:"+nameString+"年龄:"+age+"地址:"+address);
        }
    }

    void getOutsideInfo()
    {
        System.out.println("姓名:"+nameString+"年龄:"+age);
    }
}



public class TestClsss {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Outside pOut =new Outside("xiayi",22);
        pOut.getOutsideInfo();

        Outside.Inside pin = pOut.new Inside("nanjin");//通过外部类来调用内部类
        pin.getInfo();

    }

}

运行结果

姓名:xiayi年龄:22
姓名:xiayi年龄:22地址:nanjin

2.Java中的匿名类

interface Info
{
    abstract void getInsideInfo();
}

abstract class Addr
{
    String address;
    Addr(String str_addr)
    {
        address=str_addr;
    }

    String getAddr()
    {
        return address;
    }

    abstract void getAddress();
}

class Outside{
    private String nameString ;
    private int age;
    Outside()
    {

    }
    Outside(String str_name,int int_age)
    {
        nameString=str_name;
        age=int_age;
    }


    void getOutsideInfo()
    {
        Info oInfo = new Info() { //匿名内部类  用接口实现

            public void getInsideInfo() {
                // TODO Auto-generated method stub
                System.out.println("姓名:"+nameString+"年龄:"+age);
            }
        };

        oInfo.getInsideInfo();
    }


    void getOutsideAddr()
    {
        Addr a = new Addr("nanjin")//匿名内部类 用抽象类实现
        {
            public void getAddress() {
                System.out.println("地址:"+address);
            }
        };

        a.getAddress();
    }
}



public class TestClsss {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Outside pOut =new Outside("xiayi",22);
        pOut.getOutsideInfo();
        pOut.getOutsideAddr();


    }

}

运行结果

姓名:xiayi年龄:22
地址:nanjin

3.c++中的内部类

class Outside
{
private:
    string name;
    int age;
public:
    Outside(){}
    Outside(string str_name,int int_age):name(str_name),age(int_age){}

    class Inside
    {
        private:
            string addr;
        public:
            Inside(){}
            Inside(string address):addr(address){}
            void getInfo()
            {
                Outside *Os = new Outside("xiayi",22);
                cout << "姓名:"+Os->name<< " 年龄:" << Os->age<<" 地址:"<< addr <<endl;;              
            }

    };

};

int main()
{

    Outside::Inside is1("nanjin");  //通过外部类初始化内部类
    Outside::Inside *is2 = new Outside::Inside("anjin");//通过外部类初始化内部类 注意与java的不同

    is1.getInfo();
    is2->getInfo();
    system("pause");
    return 0;
}

运行结果

姓名:xiayi 年龄:22 地址:nanjin
姓名:xiayi 年龄:22 地址:anjin

猜你喜欢

转载自blog.csdn.net/chihunqi5879/article/details/80537331
今日推荐