黑马程序员技术交流社区
标题:
java 内部类可以被覆盖吗
[打印本页]
作者:
壁虎
时间:
2013-3-23 16:09
标题:
java 内部类可以被覆盖吗
本帖最后由 tuo1254 于 2013-3-24 08:08 编辑
我们都知道,子类可以覆盖父类中的函数
我想知道,父类中在成员位置上定义了一个内部类,我子类继承后能覆盖此内部类吗?为什么?
作者:
IT菜鸟
时间:
2013-3-23 16:58
1.父类中在成员位置上定义了一个内部类,相当于这个类的一个成员变量 。子类可以覆盖 。代码为证
class Out{
class Inner{
void print(){
System.out.println("i anm inner1");
}
}
}
class Out2 extends Out{
class Inner{
void print(){
System.out.println("i anm inner2");
}
}
}
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Out2().new Inner().print(); // 打印 i anm inner2
}
}
作者:
芦子骐
时间:
2013-3-23 17:43
// 父类
class Fu{
class T_1{ //定义一个内部类T1
public void run(){ //内部类中有run方法
System.out.println("Fu");
}
}
}
//子类
class Zi extends Fu{ //子类继承父类
class T_1{ //覆写其父类的内部类
public void run1(){ //注意:为了做一点改变,特意让子类内部类中的方法名为run1
System.out.println("Zi");
}
}
}
//主函数
class Test{
public static void main(String[] args){
Zi z = new Zi(); //创建子类对象
z.new T_1().run1(); //调用子类对象中内部类的run1方法,编译通过
} //输出结果为 “Zi”
}
由此可以看出,不管是什么样的类型,只要在类中声明,那么他就是该类的成员。
作者:
周一川
时间:
2013-3-23 19:39
如果是静态的可以覆盖吗,在局部的内部类,如果有静态的属性,和方法,这是不能被覆写的, 只有在成员位置上而且都要有public 修饰
作者:
柳 德 彬
时间:
2013-3-23 20:01
父类内部类是静态的也可以覆盖。
class OuterClass1
{
private int a = 10;
static class Inner
{
private int a = 20;
private int b = 5;
void one(){
System.out.println(b);
System.out.println(a);
System.out.println(this.a);
}
}
void test(){
Inner i = new Inner();
i.one();
}
}
class OuterClass2 extends OuterClass1
{
static int b = 100;
static class Inner
{
void one(){
System.out.println("b = "+ b);
}
}
void test(){
//Inner i = new Inner();
new Inner().one();
}
}
class TestInner{
public static void main(String[] args){
new OuterClass2().test();
new OuterClass().test();
//OuterClass.Inner i = new OuterClass().new Inner();
//i.one();
//OuterClass.Inner i = new OuterClass.Inner();
//i.one();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2