Nested classes are divided into two categories: static and non-static.
1. Nested classes that are declared static are called static nested classes.
2. Non-static nested classes are called inner classes.
outer class与inner class的之间能互相使用field或者method吗?
可以。
代码如下:
package FFtest2; public class FFOuter { private String first; private int second; public FFOuter(String l, int r) { first = l; second = r; } public String addStringInteger(String first, int second) { return first + Integer.toString(second); } /** * test1 * Outter class has access to inner private field * Outter class has access to inner method */ public void outterPrint() { FFOuter.InnerDisplay temp = this.new InnerDisplay("frog", 20); System.out.println("Outer class uses Inner class field : " + temp.innerFirst + ", " + temp.innerSecond); temp.print(first, second); } private class InnerDisplay { private String innerFirst; private int innerSecond; public InnerDisplay() { this("Somebody", 0); } public InnerDisplay(String s, int i) { innerFirst = s; innerSecond = i; } public void print (String f, int s) { System.out.println("Inner class: first = " + f+ ", second = " + s); } /** * test 2 * Inner class has access to outer class private field */ public void print () { System.out.println("Inner class uses outer class: first = " + first+ ", second = " + second); } /** * test 3 * Inner class has access to outer class method. */ public String add(String first, int second) { return addStringInteger(first, second); } } public static void main (String [] args){ /** * test 4 * in main(), call outter method * */ FFOuter outter = new FFOuter("zebra", 25); outter.outterPrint(); /** * test 5 * in main(), call inner method */ InnerDisplay innerDisplay = outter.new InnerDisplay(); innerDisplay.print(); System.out.println(innerDisplay.add("iphone", 10)); } }
Outer class uses Inner class field : frog, 20
Inner class: first = zebra, second = 25
Inner class uses outer class: first = zebra, second = 25
iphone10