房屋租赁备案怎么交税:JAVA多态的问题 小妹在线等噢!

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/26 23:39:02
小妹对JAVA非常感兴趣呀,现在遇到麻烦咯,请各位大哥哥大姐姐帮帮我呀,感谢啦

请写出程序的运行结果,并写出原因哈:

public class ploytest {

public static void main(String[] args) {
A a = new A();
B b = new B();
a.s = "[AA]";
b.s = "[BB]";
a = b;
System.out.println(a.s);
System.out.println(b.s);
System.out.println(a.getS());
System.out.println(b.getS());
System.out.println("====================");
((A)b).s = "[AA]";
System.out.println(a.s);
System.out.println(b.s);
System.out.println(a.getS());
System.out.println(b.getS());
}
}

class A {
String s = "[A]";
String getS() {
return s;
}
}

class B extends A{
String s = "";
String getS() {
return s;
}
}

在线等哈~~~~~~~~期盼你的出现~~

[A]
[BB]
[BB]
[BB]
====================
[AA]
[BB]
[BB]
[BB]
其实结果不重要。一运行就知道。主要是原理。
将子类对象赋值给父类对象,所得到对象是这样的一个对象:
它是一个编译是为父类对象,但运行却是一个子类对象,具体特征如下.
1.被声明为父类对象
2.拥有父类属性
3.占用子类的内存空间
4.子类方法覆盖父类的方法时,此时对象调用的是子类的方法;否则,自动调用继承父类的方法.
5.我人认为这个对象既不是父类对象,也不是子类对象.当我们用到它的方法时,
我便把它看成子类对象;若用到它的属性时,我把它看成父类对象.
它是一个占用父类属性,而使用子类方法的对象.至于到底是什么对象,我认为还是得根据声明来,它应算是父类对象,但拥有子类方法.
这就是为什么第一个a.s为[A]的道理了。
(A)b是向上转型。(A)b.s相当于把"[AA]"赋值给b的父类对象。所以由上面可以看出。a.s为[AA]而其他的都同上

java中有虚函数,但是没指针,那也许会有这样的问题,那java是怎么实现多态的?
java中可以肯定是有虚函数的,而且我们如果不申明为final形他默认就是虚函数.不用vitual申明.
"In Java, you do not need to declare a method as virtual. Dynamic binding is the default behavior. If you do not want a method to be virtual, you tag it as final"--from <core java2 :volum I>.
java中没显示的和c++中的指针,但是他有地址的概念的.而且所有我们申明的"对象"其实就是地址(或叫句柄),给他赋值就是把他指向一个内存单元.当然也可以改变他的指向.其实我们"对象"的赋值操作全是地址在变东,对象还是没有变的.那也许有人会说那样的话不是会产生很多没有"对象"(句柄)的内存区域.是的是会产生,但是java的垃圾收集机制会给我们回收这样的内存"泄漏".所以我们只关心我们操作的对象就行,其他的我们不用的对象的后事垃圾收集会给我们干.
明白了在java中的"对象"而非我们c++中理解的对象.而实际上是指针(句柄)那多态当然可以实现.
下面举个"对象"赋值(引用)的例子说明,全是地址在变,而非真的内存单元.

[A]
[BB]
[BB]
[BB]
====================
[AA]
[BB]
[BB]
[BB]

[AA]
[BB]
[BB]
[BB]

运行一次就行了三,唉........