A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© gaoyintong 中级黑马   /  2015-8-27 13:50  /  648 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是内部类?介绍一下匿名内部类?匿名内部类中的方法是否可以调用局部变量?为什么?

7 个回复

倒序浏览
调用哪个局部变量?还是外部类的成员变量?
回复 使用道具 举报
匿名内部类         匿名内部类:        其实是内部类的简化写法(局部内部类)         前提:        需要有一个类或者接口,这个类可以是抽象类,也可以是非抽象类         格式:                          new 类或者接口名(){                                 方法重写 ;                         };          匿名内部类的本质:                 是一个继承自某一个类或者实现了某一个接口的子类对象  interface Inter {//1          public abstract void show() ;          public abstract void method() ;  }  /* class Animal {          } */  // 测试类 class NoNameInnerClassDemo {          public static void main(String[] args){                          // 匿名内部类                 /*                 new Inter(){                         public void show(){                                 System.out.println("我是匿名内部类,你Y懂不?");                         }                 };                 */                  System.out.println("----------------------");                  // new Animal(){};                 // 匿名内部类                    /*                 new Inter(){                         public void show(){                                 System.out.println("我是匿名内部类,你Y懂不?");                         }                          public void method(){                                 System.out.println("Inner....method.....");                         }                 }.show();                  new Inter(){                         public void show(){                                 System.out.println("我是匿名内部类,你Y懂不?");                         }                          public void method(){                                 System.out.println("Inner....method.....");                         }                 }.method();                 */                  //找个类型接收他                 Inter in = new Inter(){                                   public void show(){                                         System.out.println("我是匿名内部类,你Y懂不?");                                 }                                 public void method(){                                         System.out.println("Inner....method.....");                                 }                 };                  // 调用方法                 in.show();                 in.method();         } }  面试题 1.要求在控制台输出”HelloWorld”?  // 接口 interface Inter {                   void show(); //切记他的权限问题public的 }  // 具体的类 class Outer {           //补齐代码         public static Inter method(){                 return new Inter(){                         public void show(){                                 System.out.println("HelloWorld");                         }                 };         }  }  // 测试类 class OuterDemo {          public static void main(String[] args) {                                  // Outer.method()说明在Outer类中存在一个静态的method方法,参数为空                 // Outer.method()可以继续调用show方法,所以返回值本质上应该是一个对象                 // 返回值类型应该是: Inter                 Outer.method().show();         } } 匿名内部类的本质:                 是一个继承自某一个类或者实现了某一个接口的子类对象  ---------------------------------------------------------------------------------------------------------------------- 2.如何调用PersonDemo中的method方法呢? //这里写抽象类,接口都行 abstract class Person {         public abstract void show(); }  // 子类继承 /* class Student extends Person {         public void show(){                 System.out.println("Student....show....");         } } */  class PersonDemo {          public void method(Person p) {                 p.show();         } }  // 测试类 class PersonTest {          public static void main(String[] args) {                 //如何调用PersonDemo中的method方法呢?                  // 创建PersonDemo对象                 PersonDemo pd = new PersonDemo();                                  // 创建Student对象                 // Student s = new Student();                  // 调用方法                 pd.method(new Person(){                         public void show(){                                 System.out.println("Student....show....");                         }                 });         } }
回复 使用道具 举报
小结:不管是局部内部类还是成员内部类如果要访问就必须创建对象      内部类可以访问外部类的成员 除了内部类是静态的要求外部类的成员也必须是静态        的,区分静态内部类和非静态内部类的对象创建格式
回复 使用道具 举报
yanglingui 发表于 2015-8-27 20:17
匿名内部类         匿名内部类:        其实是内部类的简化写法(局部内部类)         前提:        需要有一个类或者接口,这个类可以是 ...

真详细,要是排版规整一些就好了,谢谢啦!
回复 使用道具 举报
内部类就是写在类中或方法中的类,它还是一个类,与其他类的不同就是他只为这个外部类(包含内部类的类)类所用
回复 使用道具 举报
Marx_D 中级黑马 2015-8-27 23:01:40
7#
定义在内部的类,匿名内部类就是没有名字的内部类,方法内的匿名内部类可以访问被final修饰的局部变量,
回复 使用道具 举报
内部类就是类里面的类,,,匿名内部类是没有名字的内部类,它只能使用一次,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马