黑马程序员技术交流社区
标题:
关于多态的一点问题
[打印本页]
作者:
王桂丽
时间:
2012-8-6 20:05
标题:
关于多态的一点问题
class Fu//定义父类,父类里有一个成员变量num=5,还有一个静态方法method1,一个成员函数method2
{
int num=5;
static void method1()
{
System.out.println("Fu method_1");
}
void method2()
{
System.out.println("Fu method_2");
}
}
class Zi extends Fu//定义子类,父类里有一个成员变量num=8,还有一个静态方法method1,一个成员函数method2。并继承父类
{
int num=8;
static void method1()
{
System.out.println("Zi method_1");
}
void method2()
{
System.out.println("Zi method_2");
}
}
class ExtendsDemo
{
public static void main(String[] args)
{
Fu f=new Fu();//创建父类对象并调用起方法
{
System.out.println(f.num);//5
System.out.println(f.method1);//Fu method_1
System.out.println(f.method2);//Fu method_2
}
Fu z=new Zi();//建立子类对象并调用方法
{
System.out.println(f.num);//5
System.out.println(f.method1);//Fu method_1
System.out.println(f.method2);//Zi method_2
System.out.println(z.num);//8
System.out.println(z.method1);//Zi method_1
System.out.println(z.method2);//Zi method_2
}
}
}
疑问:1、运行通不过是代码哪里出的问题?
2、代码在内存中是怎样体现的?
未命名.jpg
(59.14 KB, 下载次数: 4)
下载附件
2012-8-6 20:04 上传
作者:
刘润辰
时间:
2012-8-6 20:13
f.method1!!!!!!!!!!!!!!!!!!!
你调用的是方法!!!为啥不加()???
f.method1()
这样就对了!!
还有就是System.out.println()里边不能加方法。直接写到main函数里就行了。
作者:
黑马振鹏
时间:
2012-8-6 20:24
package cn.forum0806;
class Fu//定义父类,父类里有一个成员变量num=5,还有一个静态方法method1,一个成员函数method2
{
int num=5;
static void method1()
{
System.out.println("Fu method_1");
}
void method2()
{
System.out.println("Fu method_2");
}
}
class Zi extends Fu//定义子类,父类里有一个成员变量num=8,还有一个静态方法method1,一个成员函数method2。并继承父类
{
int num=8;
static void method1()
{
System.out.println("Zi method_1");
}
//子类定义的方法名,参数和返回值都与父类完全相同,
@Override
void method2()
{
System.out.println("Zi method_2");
}
}
class ExtendsDemo
{
public static void main(String[] args)
{
Fu f=new Fu();//创建父类对象并调用起方法
{
System.out.println(f.num);//5
//System.out.println(f.method1);//Fu method_1
// method1()是方法,并且返回值是void.
f.method1();
Fu.method1();
//System.out.println(f.method2);//Fu method_2
f.method2();
}
Fu z=new Zi();//建立子类对象并调用方法
{
//定义的方法返回值都是void,不能直接调用println();
System.out.println(f.num);//5
//System.out.println(f.method1);//Fu method_1
f.method1();
//System.out.println(f.method2);//Zi method_2
f.method2();
System.out.println(z.num);//8
//System.out.println(z.method1);//Zi method_1
z.method1();
// System.out.println(z.method2);//Zi method_2
z.method2();
}
}
}
复制代码
这些错误,楼主把代码放到编译器里就可以看到的。
作者:
金鑫
时间:
2012-8-6 20:45
public class ExtendsDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Fu f=new Fu();//创建父类对象并调用起方法
// {
System.out.println(f.num);//5
// System.out.println(f.method1);//Fu method_1,这里会报一个错误,无法解析f.method1,或他不是字段。其实就是输出语句里面不能放置方法调用
// System.out.println(f.method2);//Fu method_2,这里会报一个错误,无法解析f.method1,或他不是字段。与上面一样的问题
// }
//因为你的Fu类和Zi类定义的方法里面都有输出语句,所以直接进行方法调用就可以了。
f.method1();
f.method2();
Fu z=new Zi();//建立子类对象并调用方法
// {
System.out.println(f.num);//5
// System.out.println(f.method1);//Fu method_1,这里的错误与上面是一样
// System.out.println(f.method2);//Zi method_2,这里的错误与上面是一样
System.out.println(z.num);//8
// System.out.println(z.method1);//Zi method_1,这里的错误与上面是一样
// System.out.println(z.method2);//Zi method_2,这里的错误与上面是一样
// }
//因为你的Fu类和Zi类定义的方法里面都有输出语句,所以直接进行方法调用就可以了。
z.method1();
z.method2();
}
}
复制代码
System.out.println(f.method1);你这里面应该是f.method1(),但是这样也不对,因为输出语句里面不能放置方法调用,会直接报错。
因为你的Fu类和Zi类定义的方法里面都有输出语句,所以直接进行方法调用就可以了。
作者:
王桂丽
时间:
2012-8-6 22:02
此问题已解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2