黑马程序员技术交流社区
标题:
什么是内部类?
[打印本页]
作者:
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