标题: java 继承问题 [打印本页] 作者: 曾辉 时间: 2012-2-6 11:41 标题: java 继承问题 A test = new B()和B test = new B()的区别?作者: 任奇 时间: 2012-2-6 11:45
从第一个 看 A 应该是B的父类。这是多态的体现:父类的引用指向子类的对象。 调用的是B的方法和属性等。
第二个就是单纯的实例化一个对象。作者: 魏腾飞 时间: 2012-2-6 11:49
你能把程序发全吗?我大体估计了一下应该是类的向上转型(类的继承相关的)。如果是B继承A,然后A test = new B()向上转型获得一个对象,则在B中定义的一些新方法和新变量是A中没有的,可以说这个test对象不能调用;但B test = new B()却是使用自己的对象调用,都能够使用。作者: 秦碧 时间: 2012-2-6 11:59 本帖最后由 秦碧 于 2012-2-6 11:59 编辑
在 A test=new B();中,首先定义了一个A类的引用test, 又新建了一个B类的对象,并让test指向这个对象
而在B test = new B();中,建立B类引用,并指向B类对象;
应用上的区别:
如果A中有method_1 而B中除了继承A中的method_1外,还特有method_2
B test = new B();test可以调用method_1和method_2
A test=new B(); test只能调用method_1 若这时希望test可以调用method_2 则需要将test强制转换成B(test1=(B)test;)
作者: 梅雄新 时间: 2012-2-6 12:45
从楼主提出的问题来分析 ,是new出的对象的区别不清楚
由代码可知道 A类是B类的父类
B test = new B()很好理解
楼主不明白的应该是
A test = new B()
此处是JAVA多态的表现 父类对象指向子类引用,new出来的对象拥有子类B的所有属性和方法,
区别在于父A new出的子类对象屏蔽了相对于A多余的方法和属性,也就是那些方法是不可见的,不能直接调用和访问
楼主能理解么作者: 易伟 时间: 2012-2-6 12:49
A test = new B()运用了多态思想。
我给你举个形象的例子:
Anminal a = new Cat(); //这就运用了多态思想,多态最大的特点是便于性能扩展,它除了可以new Cat类对象,也可以new Dog类对象等其他Anminal类子类的对象。
//但是多态有一个缺点就是new出来的对象调用方法有局限性,楼上已经说过了,它只能调用Anminal类中的方法,如果需要调用子类独有的方法
//就需要进行强制转型。
Cat a = new Cat(); 没有使用多态思想,Cat类中的方法可以正常调用。作者: 王文龙 时间: 2012-2-6 13:25
B b = new B():
就是简单的对一个类进行实例化;
A a = new B():
是一个简单的多态应用,
表示A是B的父类,
创建一个父类对象指向子类.
LZ看了多态入门就会理解了. 作者: 余海龙 时间: 2012-2-6 13:46
A test = new B()和B test = new B()的区别?
楼主A和B给的关系不确定啊。
就你的提问想必A和B的关系有两种情况:
1,A是一个类,B类继承了A类
2,A是一个借口,B类实现了A接口
B test = new B();
在栈内存中创建了一个B类型的引用变量test,
在堆内存中创建了一个B类对象,
并将堆内存中B类对象的首地址值付给了栈内存中的B类型的变量test。
A test = new B();
在栈内存中创建了一个A类型的引用变量test,
在堆内存中创建了一个B类对象,
并将堆内存中B类对象的首地址值付给了栈内存中的A类型的变量test。
是父类引用指向了子类对象,属于多态。作者: 李泽霖 时间: 2012-2-6 15:40
A test = new B()面向接口或父类编程典型应用,更具有灵活性,
B test = new B()创建了一个普通对象作者: 何洪森 时间: 2012-2-6 22:13
B test = new B();就是我们平时正常使用的用B类去实例化一个B类对象,然后对象可以调用B类的方法。而A test = new B();则体现了java的多态性特点。此语句应该为向上转型,test所指向的是B类,故应该调用B类的方法,可是test会遗失除与父类共有的其他方法。但是向上转型的好处是以父类为参数,调用时用子类参数,可以使得代码更简洁,也体现了java的抽象编程思想。作者: 【专】【属】 时间: 2012-2-7 19:50
A是B的父类或B的实现接口,B test =new B()是指创建B的一个实例对象
第一种方法,主要是用于多态,或面向接口编程,实现程序的通用性
第二种方法,主要是用B类的特有方法。作者: 侯丽星 时间: 2012-2-14 14:54
B test = new B():这个只是为类B创建了一个实例化对象test,没有更深层次的意义。
A test = new B():这条语句体现了多态。从这条语句中首先可以看出B继承了A,或者B实现了A;父类A的引用test指向自己子类B的对象,这样test既可以被提升成父类A,也可以被强制转换为子类类型B,这样也就大大提高了程序的扩展性。作者: lvwenwen88 时间: 2012-2-14 15:32
A test = new B();
在栈内存中创建了一个A类型的引用变量test,
在堆内存中创建了一个B类对象,
并将堆内存中B类对象的首地址值付给了栈内存中的A类型的变量test。
是父类引用指向了子类对象,属于多态。作者: 何招俊 时间: 2012-2-14 17:05
A test = new B():A 是B的父类或者实现接口,体现了JAVA编程思想的多态性,完成了子类的向上转型过程。
B test = new B():这只是在堆内存当中创建了B类的一个实例化对象,并将该对象的地址值赋值给了栈内存当中B类的引用变量test。作者: 钟保罗 时间: 2012-2-14 19:29
如果B继承了A的话,A类就是B类的父类!A test = new B() 是用到多态性的编程思想,这样可以new完子类向上转换成父类类型的引用变量。B test = new B() 实例化一个对象后,引用变量还是子类的类型作者: 黄锦成 时间: 2012-2-14 21:29
A test = new B():向上转型。编译时看A类型,运行时看B。当B调用了自己内部的特有的非static方法时,而在A没有这个方法时,会出现编译出错。 作者: 李杨 时间: 2012-2-14 23:38
一看你提问就知道你在想你的女朋友!!!作者: 石德志 时间: 2012-2-16 00:42
我觉得这样更能体现问题
B b=new B();
A a=b;
B b1=b;这样问a和b1的区别,向上转型和多态,B是A的子类,或B实现了A这一接口并且a==b1;作者: 蒙武辉 时间: 2012-2-16 01:09
第一个意思是父类指向子类的对象,然后可以调用子类中和父类相同的方法,但不可调用子类另外定义的方法,这个叫做上转型对象;第二个是一个正常的实例化对象。