定义了内部类的外部类可以被继承吗?
如果可以,那么子类得到的内部类是父类的,还是自己的?因为内部类的命名包括外部类的名称,也就是类似于把外部类名当作命名空间来用,此时在子类中的内部类的全名会是一个问题。。求...
如果可以,那么子类得到的内部类是父类的,还是自己的?因为内部类的命名包括外部类的名称,也就是类似于把外部类名当作命名空间来用,此时在子类中的内部类的全名会是一个问题。。求高手指教。。
展开
展开全部
内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。
内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。
内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类
为什么需要内部类?
典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。使用内部类最吸引人的原因是:
每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。
内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。
内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类
为什么需要内部类?
典型的情况是,内部类继承自某个类或实现某个接口,内部类的代码操作创建其的外围类的对象。所以你可以认为内部类提供了某种进入其外围类的窗口。使用内部类最吸引人的原因是:
每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。如果没有内部类提供的可以继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。
展开全部
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。
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。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
得到的当然是父类的啊,因为定义是在父类中
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询