简体   繁体   中英

get a reference to a containing class in java

I am new to Java. I'm a C++ programmer, reading some Java code. I have this class definition:

class Container {
    long ID;

    class Contained {
        void foo(){
            long parentID = ID;
        }
    }
}

I see that Contained can access any member of the Container class, simply by name.

I have one question:

What is going on here? In C++ these classes would be unrelated. But in Java, it seems, the contained class object seems to be implicitly tied to the instance of the parent class object.

Thanks Manish

PS: Sorry, I know I could pick up a book on Java, but I was hoping someone could help me.

In Java these are called nested classes. There are several types of nested classes with different semantics. There is info at http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html .

In your example that is an inner class, so its instances exist within an instance of the outer class.

Since the Contained class is not declared as static , it means that it can only exist within an instance of a Container class and hence has access to all of the methods and variables of Container .

If you had declared Contained as static , it would imitate the C++ usage that you're more used to -- that is, you could have an instance of the nested class without having an instance of Container .

See Java inner class and static nested class for further details.

This is a nested class. Its lifecycle is tied to the parent class. Read here for full understanding.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM