java--内部类

it2022-05-29  115

class B517{ B517(){ System.out.println("instance of B."); } class InnerB{ public InnerB() { // TODO 自动生成的构造函数存根 System.out.println("instance of innerB."); } } } public class A517 { public static void main(String[] args) { B517 bbb = new B517(); B517.InnerB inbbb = bbb.new InnerB(); System.out.println(); inbbb = new B517().new InnerB(); } }

//内部类名的全名称是 包名.外部类名.内部类名//在包外用全名,再外包类外面就使用 外部类名.内部类名,例如B517.InnerB//在类A517中创建的内部类句柄inbbb的声明类型是B517.InnerB(必须使用全名);//内部类的new方法。//创建一个内部类,必须先有一个外包类的对象存在。//在外包类中创建内部类对象,可以简单一点,因为外包类的this句柄已经存在。

【内部类与外包类的关系】

class B518{ private int x = 100; class InnerB{ private int y = 111; void show(){ //包内方法 System.out.print("x = "+x);//访问包外私有成员 System.out.println(", y = "+y); } } public void show(){//包外类方法 InnerB inB = new InnerB(); System.out.println(inB); System.out.println(inB.y); inB.show(); } } public class A518 { public static void main(String[] args) { new B518().new InnerB().show(); new B518().show(); } }

//在外包类的类体中,内部类对象同样属于外部类对象的成员,因此他们 可以相互访问对方的所有成员(包括私有成员),他们之间是完全相互信任的。//内部类和外部类有着各自的命名空间,即使他们有相同的方法名,也不会有冲突。//如果内部类的成员变量隐藏了外部类的成员变量,可以通过    【包外类.this.变量名】访问被隐藏的包外类的成员变量。

//内部类的编写 package Test; public class App_1 { public static void main(String[] args) { Caaa caaa = new Caaa(); caaa.set_num(5); } static class Caaa{ int num; void set_num(int n){ num = n; System.out.println("num = "+num); } } }

//由于static方法只能访问static成员,所以类Caaa只能是static

【在外部类的构造函数中创建内部类对象】

如果不想将上一个实例中的Caaa设置为static,而且还想再main中继续使用它。

(1)、在外部类的构造函数中创建内部类的对象。

(2)、在main的创建外部类的对象。

 

//内部类的编写 package Test; public class App_1 { public App_1(){ Caaa caaa = new Caaa(); caaa.setNum(5); } class Caaa{ int num; void setNum(int n){ num = n; System.out.println("num = "+num); } } public static void main(String[] args) { App_1 objApp_1 = new App_1(); objApp_1.new Caaa().setNum(23); } } //num = 5 //num = 23

在创建外部类的同时会创建一个内部类对象,这样达到了在main中使用内部类的目的。

【在窗口程序设计中,会使用这样的编程技巧来编写窗口程序】。

 

【在外部类的外面引用内部类】

  内部类对象的创建的前提,必须有一个外部类的对象。比如外部类Outer,内部类Inner。内部类中有一个方法f       ()。现在调用f()。

  Outer outer = new Outer();

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

  inner.f();

【在方法中定义内部类】  

  如果内部类中要使用到方法中的变量,那么这个变量必须为   final。

 

 

转载于:https://www.cnblogs.com/plxx/p/3336987.html


最新回复(0)