定义了内部类的外部类可以被继承吗?
发布网友
发布时间:2023-04-15 03:23
我来回答
共3个回答
热心网友
时间:2023-10-14 03:53
内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。
内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。
内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类
为什么需要内部类?
典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。使用内部类最吸引人的原因是:
每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。
热心网友
时间:2023-10-14 03:54
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。
热心网友
时间:2023-10-14 03:54
得到的当然是父类的啊,因为定义是在父类中