JAVA--成员内部类 局部内部类 匿名类
2015-11-08 11:24
423 查看
成员内部类
定义:
一个类定义在另外一个类的内部。
访问方式:
方式1 : 在外部类提供一个方法创建内部类的对象进行访问。 方式2: 在其它类中直接访问。 格式: 外部类.内部类 变量名 = new 外部类().new 内部类()
应用场景:
1.内部类可以访问外部类的所用成员; 2.外部类与内部类有同名的成员时,默认访问内部类成员。但是可以用 外部类.this.成员变量名 指定访问外部类成员。 3.当内部类被private修饰时,不能通过其他类直接访问,只能通过方法1. 4.当内部类中的成员变量被static修饰时,该内部类也需要用static修饰。(静态成员的访问并不需要对象的存在。) 5.如果要访问一个静态的内部类,访问方式为: 外部类.内部类 = new 外部类.内部类();
样例代码:
class Outer // new Outer.Inner.x { int x = 100; static class Inner { static int x = 200; public void print() { //Outer.this.x System.out.println("Inner...." + x ); } } //访问内部类方式1 : 在外部类提供一个方法创建内部类的对象进行访问。 public void instance() { Inner ee = new Inner(); ee.print(); System.out.println("Inner...."); } } class Demo2 { public static void main(String[] args) { System.out.println(Outer.Inner.x); /* Outer ww = new Outer(); ww.instance(); */ //访问内部类方式2: 在其它类中直接访问。 格式: 外部类.内部类 变量名 = new 外部类().new 内部类() /* Outer.Inner inner = new Outer().new Inner(); inner.print(); */ //静态内部类的访问方式: Outer.Inner inner = new Outer.Inner(); inner.print(); } }
局部内部类
定义:
在一个类的方法内部定义另外一个类。
访问方式:
方式一:在外部类提供一个方法创建内部类的对象进行访问。
使用注意:
1.如果局部内部类访问一个局部变量时,那么该局部变量必须用final 修饰。
样例代码:
class Outer { int y = 10; public void test() { final int x = 200; class Inner { public void print() { System.out.println("内部类" + x); // 此时的x为局部变量x 的复制品 } } Inner dd = new Inner(); dd.print(); } } class Demo2 { public static void main(String[] args) { //System.out.println(Outer.Inner.x); Outer ss = new Outer(); ss.test(); } }
匿名内部类:
使用前提:
必须存在继承和实现关系。
样例代码:
abstract class Animal { public abstract Animal run(); public abstract void sleep(); } class Outer { /* public void print() { class Dog extends Animal // 局部内部类 { public void run() { System.out.println("狗在跑。。。。。"); } } Dog dd = new Dog(); dd.run(); } */ //匿名内部类 public void print(){ Animal a = new Animal(){ //多态的形式 //匿名内部类与Animal是继承关系, //匿名内部类成员 public Animal run() { System.out.println("狗在跑。。。。。"); return this; } public void sleep() { System.out.println("狗在睡觉睡觉。。。。。"); } public void bite() { System.out.println("狗在摇啊摇。。。。。"); } }; a.run().bite(); a.sleep(); } } class Demo1 { public static void main(String[] args) { Outer ss = new Outer(); ss.print(); } } ************************************** interface Dao { public abstract void run(); } /*class Outer { public void print() { new Dao(){ public void run() { System.out.println("再吃再吃"); } }.run(); } } */ class Demo3 { public static void main(String[] args) { //Outer aa = new Outer(); test(new Dao() { public void run() { System.out.println("再吃再吃....."); } } ); } public static void test(Dao s) { s.run(); } }
相关文章推荐
- Android Native 绘图方法
- C#中struct和class的区别详解
- VBS ArrayList Class vbs中的数组类
- 大家看了就明白了css样式中类class与标识id选择符的区别小结
- 深入了解PHP类Class的概念
- jquery 表单验证之通过 class验证表单不为空
- setAttribute 与 class冲突解决
- JavaScript中的类(Class)详细介绍
- javascript面向对象包装类Class封装类库剖析
- jQuery使用hide方法隐藏指定元素class样式用法实例
- jQuery给多个不同元素添加class样式的方法
- JavaScript更改class和id的方法
- 一篇入门的php Class 文章
- 深入C++中struct与class的区别分析
- js中设置元素class的三种方法小结
- c++中typename和class的区别介绍
- php class类的用法详细总结
- Windows平台的 PHP 报错 Fatal error: Class COM not found in 的解决方法
- JavaScript跨浏览器获取页面中相同class节点的方法
- js实现class样式的修改、添加及删除的方法