定义了内部类的外部类可以被继承吗?

如果可以,那么子类得到的内部类是父类的,还是自己的?因为内部类的命名包括外部类的名称,也就是类似于把外部类名当作命名空间来用,此时在子类中的内部类的全名会是一个问题。。求... 如果可以,那么子类得到的内部类是父类的,还是自己的?因为内部类的命名包括外部类的名称,也就是类似于把外部类名当作命名空间来用,此时在子类中的内部类的全名会是一个问题。。求高手指教。。 展开
 我来答
cheng701898
高粉答主

推荐于2017-10-02 · 繁杂信息太多,你要学会辨别
知道顶级答主
回答量:6.2万
采纳率:85%
帮助的人:6671万
展开全部
内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。
内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。
内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类

  为什么需要内部类?

  典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。使用内部类最吸引人的原因是:

  每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。
jiangshuiy
2012-05-29 · TA获得超过169个赞
知道答主
回答量:167
采纳率:50%
帮助的人:131万
展开全部
public class SuperInner {
class Inner {
public Inner() {
System.out.println("From SuperInner.Inner");
}
}
}

public class SubInner extends SuperInner{

// class Inner{
// public Inner() {
// System.out.println("From SubInner.Inner");
// }
// }

public static void main(String[] args) {
SuperInner si = new SubInner();
si.new Inner();

SubInner si2 = new SubInner();
si2.new Inner();
}
}

输出:
From SuperInner.Inner
From SuperInner.Inner

如果把注释去掉:
From SuperInner.Inner
From SubInner.Inner

说明是根据定义的,如果定义的那个类有,就直接使用,如SuperInner si = new SubInner();,不管子类有没有这个内部类,都是使用声明时的SuperInner的内部类;如果没有,则去超类去寻找,如SubInner si2 = new SubInner(); si2.new Inner();在SubInner类没有这个内部类时,会自动寻找到超类SuperInner的Inner。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
汤巧丽782
2012-05-29
知道答主
回答量:25
采纳率:0%
帮助的人:14.6万
展开全部
得到的当然是父类的啊,因为定义是在父类中
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式