日期:2014-05-20  浏览次数:20803 次

java中的多态机制问题
java中的多态机制问题,首先我想问下多态只是对于方法来说吗?成员变量的强制转换算不算多态?
然后对于多态机制,虽然能看懂,但是有些问题想不通,求前辈们给点解释。我的疑问在于:子对象给父对象实例化的时候,如果子对象有和父对象相同的变量和方法,但是调用的时候,访问的变量时父类的,访问的方法是子类的。我知道前面想要访问子类的需要做强制转换,后面的是因为动态绑定。但是java中为什么会有这种区别呢?还是因为java就是这样针对变量和方法所分别设定机制的呢?
新人才开始学,求指点!多谢!
代码:
1.
import static java.lang.System.*;
class Car 
{String aMember ="我是汽车类的成员变量";
}
class Truck extends Car{String aMember = "我是卡车类变量,汽车类也有";
}
public class c43
{
public static void main(String[] args) 
{Car c = new Truck();out.println(c.aMember);
}
}
这个测试结果是“我是汽车类变量”,默认访问的是父类成员。
2.代码2
import static java.lang.System.*;
class Test{
public String name;public Test(){};
public void setName(String n)
{
this.name=n;out.println("在父类中");
}
public String getName()
{
return this.name;
}
}
public class c44 extends Test
{public void setName(String name)
{
out.println("子类中调用了setName,这个在父类中也有");
}
public static void main(String[] args) 
{
c44 child = new c44();
Test test[] = new Test[2];
test[0] = child;
test[0].setName("silence");
test[1] = new Test();
}
}
这个访问了是子类中的setname,输出了“子类调用了setname”。
java 多态

------解决方案--------------------
多态表现为方法的重写。

和成员没有关系。

多态表达继承中的关系。
------解决方案--------------------
多态体现在方法上,楼主说的不是多态,非面向对象语言也能做到类型强制转换。