大家好,欢迎来到IT知识分享网。
Java是一个纯面向对象的语言,其面向对象的各种机制比C++更为成熟。C++是同时面向对象和面向过程的语言,但在语法上有些机制略逊色于Java,其中一个是有关抽象类和抽象函数。C++的语法较为复杂(virtual关键字,和“=0”)的写法,多继承机制也会让代码理解起来相比Java更困难一些。而Java只支持单继承,但可以实现多个接口,这就让Java变得更为灵活。其中匿名内部类的设置就使得Java能够更加灵活地处理抽象类或接口的实例的问题。
当然,匿名内部类是可以继承一个非抽象类的,这个语法可以用于构造树形数据结构,比如国家行政区划就是树形结构,匿名内部类可以直接继承相应的树形结构类,不需要指定类名,然后在初始化块中就可以创建一个具有下一级行政区划的数组,而其中每一个区划都可以这样去做,从而可以完成一个省(自治区)的行政区划信息数据结构的构建。
代码示例(以宁夏为例)
//构建地址类,地址类是一个树形结构类 class Address { //设成保护访问等级是为了让匿名内部类能够修改里面的内容 protected String name; //本级行政区划名称 protected Address[] subarea; //下一级的行政区划地址 public Address(String name) { this.name = name; this.subarea = null; } //先序遍历,并通过level指定行政区划等级 public void traversal(int level) { for (int j = 0; j < level; j++) { System.out.print(" "); } System.out.println(this.name); if (this.subarea != null) for (int j = 0; j < this.subarea.length; j++) { this.subarea[j].traversal(level + 1); } } } public class MAIN { public static void main(String[] args) { Address[] provinces = new Address[] { new Address("宁夏回族自治区") { //ConstructBlock { this.subarea = new Address[] { new Address("银川市") { //ConstructBlock { String[] districts = new String[] { "金凤区", "兴庆区", "西夏区", "灵武市", "永宁县", "贺兰县" }; this.subarea = new Address[districts.length]; for (int j = 0; j < this.subarea.length; j++) { this.subarea[j]= new Address(districts[j]); } } }, new Address("石嘴山市") { //ConstructBlock { String[] districts = new String[] { "大武口区", "惠农区", "平罗县" }; this.subarea = new Address[districts.length]; for (int j = 0; j < this.subarea.length; j++) { this.subarea[j]= new Address(districts[j]); } } }, new Address("吴忠市") { //ConstructBlock { String[] districts = new String[] { "利通区", "红寺堡区", "青铜峡市", "盐池县", "同心县" }; this.subarea = new Address[districts.length]; for (int j = 0; j < this.subarea.length; j++) { this.subarea[j]= new Address(districts[j]); } } }, new Address("固原市") { //ConstructBlock { String[] districts = new String[] { "原州区", "西吉县", "隆德县", "泾源县", "彭阳县" }; this.subarea = new Address[districts.length]; for (int j = 0; j < this.subarea.length; j++) { this.subarea[j]= new Address(districts[j]); } } }, new Address("中卫市") { //ConstructBlock { String[] districts = new String[] { "沙坡头区", "中宁县", "海原县" }; this.subarea = new Address[districts.length]; for (int j = 0; j < this.subarea.length; j++) { this.subarea[j]= new Address(districts[j]); } } }, }; } } }; for (int j = 0; j < provinces.length; j++) { provinces[j].traversal(0); } } }
运行结果
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/49502.html