黑马程序员技术交流社区

标题: 什么是内部类? [打印本页]

作者: gaoyintong    时间: 2015-8-27 13:50
标题: 什么是内部类?
什么是内部类?介绍一下匿名内部类?匿名内部类中的方法是否可以调用局部变量?为什么?
作者: 徐雪涛xuxuetao    时间: 2015-8-27 14:41
调用哪个局部变量?还是外部类的成员变量?
作者: yanglingui    时间: 2015-8-27 20:17
匿名内部类         匿名内部类:        其实是内部类的简化写法(局部内部类)         前提:        需要有一个类或者接口,这个类可以是抽象类,也可以是非抽象类         格式:                          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:19
小结:不管是局部内部类还是成员内部类如果要访问就必须创建对象      内部类可以访问外部类的成员 除了内部类是静态的要求外部类的成员也必须是静态        的,区分静态内部类和非静态内部类的对象创建格式
作者: Vincent饭饭    时间: 2015-8-27 20:39
yanglingui 发表于 2015-8-27 20:17
匿名内部类         匿名内部类:        其实是内部类的简化写法(局部内部类)         前提:        需要有一个类或者接口,这个类可以是 ...

真详细,要是排版规整一些就好了,谢谢啦!
作者: 哈哈哈欠虫    时间: 2015-8-27 22:06
内部类就是写在类中或方法中的类,它还是一个类,与其他类的不同就是他只为这个外部类(包含内部类的类)类所用
作者: Marx_D    时间: 2015-8-27 23:01
定义在内部的类,匿名内部类就是没有名字的内部类,方法内的匿名内部类可以访问被final修饰的局部变量,
作者: 在唱歌    时间: 2015-8-27 23:20
内部类就是类里面的类,,,匿名内部类是没有名字的内部类,它只能使用一次,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2