卓别林传读后感:如果b 是a的子类,那a x=new a();和a x=new b();有什么不同?

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 19:25:14
a x = new b()有什么特殊的作用啊,是不是 a x=new a()和a x=new b();在实际上除了是创建了不同的实例意外,在功能上好像没什么不同吧!谢谢您啊
各位大侠,我报托您了,我跪求还不行吗?您就回一个吧!谢谢啊
谢谢,您基本的说出了,这个问题的答案,但是你有没有遇到这样的问题,就是比如b中有aa变量,a中没有aa变量但是你使用obj3.aa那就会造成无法变异,但是如果你在a中也定义了aa变量,你就可以骗过编译器编译程序,另外假设你在a中也定义一个action2()是{System.out.println(aa);},
b中也有一个是{System.out.println("action in b");System.out.println(aa);},且你让a中的aa=1,b中的aa=2;你有没有考虑过如果我使用obj3.aa你认为是哪个aa,obj3.action2(),你认为是谁的action2?呵呵,可以告诉你的是运行的结果是:
action in b
1
慢慢琢磨吧!

假设 a 中有 action() 方法,b 继承了 a,并加了 action2() 方法。那么

a obj = new a();
b obj2 = new b();

a obj3 = new b();

// b obj = new a(); 这是非法的

obj 是对 a 的一个实例的引用,它可以执行 action(),但是不能执行 action2()
obj2 是对 b 的一个实例的引用,它 action() 和 action2() 都可以执行
obj3 是对 b 的一个实例的引用,但是 obj3 本身是 a 类型的引用,因此,虽然 obj3 引用的对象是 b 类型的,但是你无法通过 obj3 来执行 action2()

当然有,举个设计模式中简单工厂模式的例子:
如果 a 是船抽象类,b汽轮类,c油轮类,d游艇是其子类
如果我们在设计的开始并不知道要创建b,c,d类中的哪一个对象,就可以建一个工厂类用 a x = new b();来动态创建了。

北京在崇文门附近有一个金池舞蹈学院,近期就开了爵士舞蹈班。可以去看看。
http://goldendancing.com/index.asp参考资料:http://goldendancing.com/index.asp

第一个是new一个a类的对象
第二个是父类的引用指向子类的对象

请问你学过java语言吗?
去里面查一下