黑马程序员技术交流社区
标题:
关于使用内部类。。。。
[打印本页]
作者:
张旺达
时间:
2013-5-26 20:36
标题:
关于使用内部类。。。。
本帖最后由 张旺达 于 2013-5-26 21:34 编辑
最近看了内部类的部分,发现一个问题:
既然内部类是外部类的成员,那么是否可以为外部类定义子类,在子类中再定义一个内部类来重写其父类中的内部类??{:soso_e134:}
作者:
王靖远
时间:
2013-5-26 20:53
楼主想说子类能否继承并重写父类中的内部类吗?
作者:
王靖远
时间:
2013-5-26 20:56
这个问题蛮好的。写代码验证去。
作者:
王靖远
时间:
2013-5-26 21:16
<blockquote>package com.debug;
复制代码
结果是
Outer....show
Inner....run
Outer....show
ZiInner.........run
class Outter
{
public void show()
{
System.out.println("Outer....show");
}
class Inner
{
public void run()
{
System.out.println("Inner....run");
}
}
}
class Zi extends Outter
{
class Inner
{
}
}
class YanZhengInner
{
public static void main(String[] args)
{
new Outter().show();
new Outter().new Inner().run();
new Zi().show();
new Zi().new Inner().run();
}
}
复制代码
结果是:
编译失败。Exception in thread "main" java.lang.Error: Unresolved compilation problem: The method run() is undefined for the type Zi.Inner
at com.debug.YanZhengInner.main(YanZhengInner.java:37)
结论是:
子类可以继承外部类成员,但是不能继承内部类成员。想要有同样功能必须自己写,但是不能说是复写。
作者:
王靖远
时间:
2013-5-26 21:18
package com.debug;
class Outter
{
public void show()
{
System.out.println("Outer....show");
}
class Inner
{
public void run()
{
System.out.println("Inner....run");
}
}
}
class Zi extends Outter
{
class Inner
{
public void run()
{
System.out.println("ZiInner.........run");
}
}
}
class YanZhengInner
{
public static void main(String[] args)
{
new Outter().show();
new Outter().new Inner().run();
new Zi().show();
new Zi().new Inner().run();
}
}
复制代码
结果
Outer....show
Inner....run
Outer....show
ZiInner.........run
作者:
韩明海
时间:
2013-5-26 21:18
class MyclassOut
{
//外部类中定义一个字符串并初始化
String str = "hello java out";
//定义一个方法,让外部类调用内部类的输出方法
public void test()
{
(new MyclassIn()).mytest();
}
class MyclassIn
{
//定义一个和外部类同名的字符串并初始化一个不同于外部类的值
String str = "ok in";
//分别输出内部类和外部类的str的值
public void mytest()
{
System.out.println(str);
System.out.println(MyclassOut.this.str);
}
}
}
class son extends MyclassOut
{
String str = "hello java son";
public void test()
{
(new MyclassIn()).mytest();
}
class MyclassIn
{
//定义一个和外部类同名的字符串并初始化一个不同于外部类的值
String str = "son ok in";
//分别输出内部类和外部类的str的值
public void mytest()
{
System.out.println("------------1--------------");
System.out.println(str);
System.out.println(son.this.str);
System.out.println(son.super.str);
System.out.println("-----------2---------------");
son.super.test();
}
}
}
public class Test7
{
public static void main(String[] ages)
{
son testClass = new son();
testClass.test();
}
}
复制代码
不知道是不是你说的意思
作者:
王靖远
时间:
2013-5-26 21:18
王靖远 发表于 2013-5-26 21:18
结果
Outer....show
Inner....run
补充上一楼挂掉的代码
作者:
韩明海
时间:
2013-5-26 21:19
------------1--------------
son ok in
hello java son
hello java out
-----------2---------------
ok in
hello java out
复制代码
这是输出结果,刚才忘加了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2