匿名内部类初始化问题
//创建一个接口 public interface InnerClass { //在接口中定义两个抽象方法 public String getName(); public int getAge(); }
public class OutClass { //定义一个获取姓名和年龄的方法 传入接口类型为返回值类型 public InnerClass getInnerClass(final int age,final String name) { //返回接口实例 return new InnerClass() { //匿名内部类 int age_; //内部类属性 String name_; { //构造代码块初始化传入的参数age和name if(0<age&&age<200){ age_=age; name_=name; } } //实现接口中获取name和age方法 public String getName() { return name_; } public int getAge() { return age_; } }; //匿名内部类用封号结束大括号 } public static void main(String[] args) { //实例化 OutClass out=new OutClass(); InnerClass in1=out.getInnerClass(201, "chenssy"); InnerClass in2=out.getInnerClass(23, "ssychen"); System.out.println(in1.getName()); System.out.println(in2.getName()); } }
老师我的注释标的都对嘛?
这个匿名内部类在方法体内是不是也算方法内部类?方法体是return new InnerClass(){};吗?如果是的话为什么这部分不在括号内?
老师能不能具体讲一下这种匿名内部类的实现方式?与基本那种有什么区别?
如果要实现匿名内部类的初始化 能不能像之前那种格式呢?应该怎么改?
这个方法结构又是新的模式 要是自己写感觉会欠很多东西 但又不知道哪里不足 怎么办?可以把这段代码当模板吗?
正在回答 回答被采纳积分+1
同学你好,老师依次回答同学的问题:
1、对于第一个问题,同学的注释是正确的。
2、对于第二个问题,并不属于方法内部类,方法内部类是指在普通方法中定义的内部类,例如:
3、对于第三个问题,匿名内部类也就是没有名字的内部类。正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写。但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口。通常使用匿名内部类就相当于实现了接口或继承了父类。
实现方式:
(new 父类的构造方法或要实现的接口(){ 匿名内部类的类体; });
而普通成员内部类是指直接在一个类中,嵌套一个class类。如:
4、对于第四个问题,匿名内部类的初始化,只可以通过构造代码块为匿名内部类创建一个构造器的效果。进行初始化属性值哦~
5、对于第五个问题,同学可以先将代码的模板背下来,然后多练多写,就可以巩固代码啦~
6、对于第六个问题,你的理解是正确的,因为这里年龄为201,不符合if的判断条件,也就无法将属性赋值给内部类的属性,所以输出为null。
如:
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
6.最后输出结果第一行是null 是因为初始化条件中只要年龄不符合姓名也就不能返回传入的值吗?
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星