黑马程序员技术交流社区
标题:
多态的弊端 <已解决>
[打印本页]
作者:
黑马-王言龙
时间:
2012-7-31 17:37
标题:
多态的弊端 <已解决>
本帖最后由 黑马-王言龙 于 2012-7-31 22:35 编辑
毕老师关于多态有这么一句话:
多态的弊端:只能使用父类的引用访问父类中的成员,出现访问局限。
我的疑问是:这弊端如何理解?
多态为何会出现访问局限?
这问题问的没水平,毕题。
作者:
纪艺松
时间:
2012-7-31 17:48
就是说在父类引用指向子类对象的时候,只能访问父类中有的方法或变量 比如Father f = Son s(); 这时候父类的引用f就只能访问Father中有的变量,如果子类有覆盖父类的方法,那就调用子类的方法,如果没有就调用父类的方法;;;
作者:
陈红建
时间:
2012-7-31 18:07
这是不是跟 向上转型有关系?
作者:
杜佳瑞
时间:
2012-8-1 09:59
本帖最后由 杜佳瑞 于 2012-8-1 10:03 编辑
class Fu
{
void method1()
{
System.out.println("fu method1");
}
void method2()
{
System.out.println("fu method2");
}
static void method4()
{
System.out.println("fu method4");
}
}
class Zi extends Fu
{
void method1()
{
System.out.println("zi method1");
}
void method3()
{
System.out.println("zi method3");
}
static void method4()
{
System.out.println("zi method4");
}
}
class DuoTaiDemo
{
public static void main(String[] args)
{
Fu f=new Zi();
f.method1();//
对象所属类有调用方法,则执行对象中方法,运行时看右边
f.method2();//
对象所属类没有调用方法,执行父类中方法,运行时看右边
//f.method3();
//
编译时不通过,因为父类中没有method3(),编译时看左边
也就是楼主所说父类引用不能访问子类函数
f.method4();//
函数为静态函数时,执行父类函数,无论编译还是运行都看左边
}
}
结果:
zi method1
fu method2
fu method4
作者:
王程
时间:
2012-8-4 10:29
class Fu
{
String name="zhangsan";
void show()
{
System.out.println("Fu");
}
public static void method()
{
System.out.println("父类方法");
}
}
class Zi extends Fu
{
String name="lisi";
void show()
{
System.out.println("Zi");
}
public static void method()
{
System.out.println("子类方法");
}
}
public class Test1
{
public static void main(String[] args)
{
Fu f=new Zi();
f.show();
System.out.println(f.name);
f.method();
}
}
复制代码
楼上的回答很完善了,我就添加点代码吧
多态中成员函数的特点(非静态):------>动态绑定
编译:参阅引用变量所属类是否有调用的方法,有则通过,没有则失败
f调用show方法,f属于类Fu,先检查Fu中是否有show方法,如果没有那么编译失败
执行:参阅对象所属类是否有调用的方法,有则调用对象类的方法,没有则调用引用变量所属类的方法
对象是new Zi(),属于类Zi,执行时先查看Zi是否有show方法,如果有就执行Zi的show方法,若没有,就执行Fu中的show方法
多态中成员变量及静态成员函数:-------->静态绑定
编译和执行的时候都是参阅引用变量所属类,即均参阅左边的类。
多态中的成员变量是不存在覆盖的,所以输出的还是引用变量f属于类Fu中的成员变量的值zhangsan
其中静态成员函数,不依附于对象存在,所以引用是哪个类就执行哪个类的方法。
静态成员函数也是绑定的,f.method()方法输出的是“父类方法”
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2