必须要用接口??
还有0人有此问题
发表在Java视频课程答疑 2016-12-22
是否精华
版块置顶:

如题!局部内部类和匿名内部类都必须用上接口??

分享到:
精彩评论 5
David
学分:914 LV7
TA的每日心情
最后的冲刺
2017-07-15 10:46:08
2016-12-22
沙发

局部内部类可以不用接口,例如:

public class Students {

    public static void main (String[] args) {

        class GradeOne {

            int stuNums;

        }

        GradeOne go = new GradeOne();

        go.stuNums = 99;

        System.out.println("一年级有学生" + go.stuNums + "人");

    }

}

但是匿名内部类必须继承一个父类,或实现一个接口。其中最常用的创建匿名内部类的方式是创建某个接口类型的对象。

CCZ0924
学分:365 LV5
2016-12-22
板凳

老师,这个怎么写成不用接口??


interface OutInterface2 { //定义接口

}

class OuterClass3 {

public OutInterface2 doit(final String x) { // doit()方法参数为final类型

// 在doit()方法中定义一个内部类

class InnerClass2 implements OutInterface2 {

InnerClass2(String s) {

s = x;

System.out.println(s);

}

}

return new InnerClass2("doit");

}

}


@David,@根号申
根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2016-12-23
地板

你搞懂两个概念就容易理解了这个问题了:

1. 局部变量的有效范围。不管是成员内部类还是匿名内容类,他们的有效范围就在最近的大括号之内,超出这个括号范围以外的地方是无法使用的。

2. 类的继承关系。不管是继承类,还是实现接口,内部类都建立了一个“子类”身份。如果想要在超出有效范围的地方调用子类逻辑,就需要将子类转为父类对象调用。这属于面相对象开发的特点。


针对你提出的这个问题,可以从两方面解决:

1. 成员内部类不要在有效范围以外的地方使用。只在doit()里面创建并调用内部类对象。

2. 将父接口改为父类。把OutInterface2改成类,并在OutInterface2类中创建构空的造构造方法,让子类去重写这个构造方法,也能实现相同的效果。

CCZ0924
学分:365 LV5
2016-12-23
4L

额,,父接口改为父类。怎么理解。。

@根号申
根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2016-12-23
5L

把interface关键字改为class关键字,继承时候使用extends

首页上一页 1 下一页尾页 5 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照