不好意思,我应当在基础类发这个问题的,但是基础类没有回答这个问题,这个问题对于我来说很难,理解,不知道大家是怎么理解这个问题的,请指教小弟一二,不胜感激.class A
{
String name="张三";
public static void main(String args[])
{
A x=new B();
System.out.println(x.getClass().getName()); //返回B
System.out.println(x.age);//不明白,既然x为B类的实例变量,B类中又有成员变量age.些时为什么会出错呢?
System.out.println(x.name);
}
}
class B extends A
{
int age=20;
}
{
String name="张三";
public static void main(String args[])
{
A x=new B();
System.out.println(x.getClass().getName()); //返回B
System.out.println(x.age);//不明白,既然x为B类的实例变量,B类中又有成员变量age.些时为什么会出错呢?
System.out.println(x.name);
}
}
class B extends A
{
int age=20;
}
解决方案 »
- 求解
- Java中怎样才能将窗口设置成和操作系统相同的风格?
- 有没有把java.awt.Shape序列化为XML文件,并可以反序列化的包啊?
- 求jcreator pro 3.5注册码
- ACM上做题每次都提示运行超时只看楼主收藏
- 要在浏览器里生成web报表,看看大家的意见。
- 谁能解决在安装vaj4.0中文版的时候,总是提示下载的不正确的语言包这个问题?
- 请帮忙解决一下,重谢!
- 我刚学jbuilder,很菜,各位前辈,请帮帮我的忙!!!!!!!!!!!!!!!!!!!!!!!!!!1
- 【求教】Java判断集合中的元素是否相互包含比较好的方法?
- JDK的环境变量在2K和XP下配制有区别么?
- 大家都过来看看这个问题。。。怎么解决?
String name = "B张三B";
public static void main(String args[]) {
A x = new B();
System.out.println(x.getClass().getName()); //返回B
System.out.println(x.age);
System.out.println(x.name);
}
}class A {
int age = 20;
String name = "A张三A";
}==========
可以这样完成。不过如果要你那样, x.age 要强行转换为((B)x).age
x.age这种调用方法本来就不符合程序设计的思想,如果想要直接调用x.age,那还不如一开始就声明成B x = new B()这样更好,既然声明成A,那么对于下面的程序就应该是透明的,没有人知道原来它是一个B,就应该认为它就是一个A。
class A
{
String name="张三";
int age=30;
void qq()
{
System.out.println("第一次");
}
public static void main(String args[])
{
A x=new B();
System.out.println(x.name);
x.qq();
}
}
class B extends A
{
int age=20;
void qq()
{
System.out.println("第二次");
}}请问一下,上面申请了一个A类的引用X指向B类的实例,为什么x.name是访问A类的成员变量,而x.qq()是访问B类的成员方法.我是这么认为的,引用X要么都访问A类的成员变量,和成员方法,要么都访问B类的成员变量和成员方法,怎么交叉访问了,请问一下,有什么规律吗?
请大家给我说一下它的运行机制好吗?谢谢.
可以这样实现. B(){
name="sd";
}
由于B类继承于A类,所以,B类将拥有A类中所有的属性和方法(得看修饰符,如果是private的就没办法了).这叫遗传.所以,你使用x.name所打印出来的东西,与A类中的无异.
还有一种叫变异的,就像你的qq(),B类继承了A类,B类拥有了一个和A类中一样功能的qq()方法,但你在B类中,重写了该方法,所以,你用x.qq()打印出来的是B类中的方法.如果你想在B类中打印出A类中的qq().可以使用super.qq();至于 shan1119(大天使,卐~解!) 说B实现了对qq()的重载...估计他一时间打错了..这是重写,不是重载.