黑马程序员技术交流社区

标题: 一道内部类的题 [打印本页]

作者: wangleixhlm    时间: 2014-5-27 22:23
标题: 一道内部类的题
本帖最后由 wangleixhlm 于 2014-5-28 22:13 编辑

  1. public class OuterClass
  2. {
  3. private double d1 = 1.0;
  4. //insert code here
  5. }
复制代码
插入内部类定义在注释部分,哪几个正确,为什么?

A. class InnerOne{
public static double methoda() {return d1;}
}
B. public class InnerOne{
static double methoda() {return d1;}
}
C. private class InnerOne{
double methoda() {return d1;}
}
D. static class InnerOne{
protected double methoda() {return d1;}
}
E. abstract class InnerOne{
public abstract double methoda();
}


作者: 13556793092    时间: 2014-5-27 22:48
题目索要补充的是一个成员位置的内部类:
1.当内部类中定义了静态成员,该内部类必须是static的。因此排除答案A,B,D
2.成员位置的内部类相当是外部类的一个成员,成员为抽象,那么外部类肯定必须定义为抽象,因此答案E错误。
正确答案是:C

楼主给分啊
作者: 寻找人生目标    时间: 2014-5-27 23:40
  1. A. class InnerOne{
  2. public static double methoda() {return d1;}
  3. }
复制代码

A选项错    内部类如果里面有静态方法则这个内部类也必须是静态的 反之不一定  B选项跟A一样一样的
内部类可以是私有的只能外部类中访问  外部类之外无法访问   C选项OK
被静态修饰的内部类访问外部类的成员的时候外部类的成员也必须是静态的  D错

E选项按2楼说的也有道理  eclipse却没报错   具体原因不知道   
楼主知道了确切的答案麻烦给说下   
作者: 海世山盟    时间: 2014-5-28 16:05
a 和d是肯定错,原因如楼上兄弟所讲。关于e的问题。
首先来说内部类他是一个类,和方法还是有一定区别的。
对于一个类里面有抽象方法,类必须是抽象的问题:抽象方法时没有主体的,也就是具体的执行过程被省略了,因此这个方法不能直接用,因此这个类功能不完善,因此类不能实例化,也就必须抽象。
而抽象的内部类却不同,因为抽象的内部类有执行主体(也就是大括号里面有类容),也就是那个抽象的方法。所以如果将这个抽象类等同一个函数看待的话他是有执行主体的,故外部类不需要声明为抽象。因此e的对错就解决了。
抽象函数:没有执行主体  
抽象内部类:有执行主体,也就是那个内部类的抽象方法

作者: wangleixhlm    时间: 2014-5-28 21:40
海世山盟 发表于 2014-5-28 16:05
a 和d是肯定错,原因如楼上兄弟所讲。关于e的问题。
首先来说内部类他是一个类,和方法还是有一定区别的。
...

嗯,答案是c,e。原因大概就是你说的这个。




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