我们在外部类中定义一个成员内部类,这个内部类和成员变量成员方法是同级的
内部类非私有
应为内部类非私有,所以我们可以通过以下格式获取内部类的对象
外部类 . 内部类 变量名称 = 外部类 . 内部类对象;
内部类私有
内部类作为外部类的成员,是可以用private来修饰的,使用private修饰外界无法直接获取该对象的,同时我们也没办法通过相关
的类型来进行接收,我们可以在外部类中提供相关的get/set方法来进行处理
public class OOPj { public static void main(String[] args) { Ou.Inner inner = new Ou().new Inner(); inner.show(); Ou o = new Ou(); o.setInner(); System.out.println(o.getInner()); //可以获取内部类对象但是没法用变量来接收,没法访问相关的属性和方法 o.getInner(); } } /** * 外部类 */ class Ou{ /** * 内部类 */ private String name="张三"; class Inner{ public void show(){ System.out.println(name); } } public void setInner(){ Inner in = new Inner(); in.show(); } public Inner getInner(){ Inner in = new Inner(); return in; } void info(){ } }
当变量名相同的情况
当外部类成员变量和内部类成员变量及内部类方法中的局部变量同名的情况下如何处理
class Ou{ /** * 内部类 */ private String name="张三"; private int age = 10; class Inner{ private int age = 20; public void show(){ int age = 30; System.out.println(name); System.out.println(age);//内部类的局部变量 System.out.println(this.age);//内部类的成员变量 System.out.println(Ou.this.age);//获取外部类的成员变量 } }
成员内部类:可以理解为和成员变量同级
局部内部类:可以理解为和局部变量同级的内部类
public class OOP2 { public static void main(String[] args) { Out out = new Out(); out.show(); } } class Out{ int num = 20; /** * 在JDK1.8之后把局部内部类中使用的外部方法的局部变量默认的提升为final * 在JDK1.8之前这里会强制要求我们将局部变量声明为final类型 */ public void show(){ num = 30; //定义一个局部内部类 class Inner{ public void info(){ System.out.println("inner执行了.."+num); } } //使用内部类对象 调用其中的方法才会执行 Inner inner = new Inner(); inner.info(); System.out.println(num); } }
搜索
复制