//请真正能深入了解java语法的朋友进来说两句!!!!!
public class aa
{
public int num=1;
}
class bb extends aa
{
public String num= "真的爱你 ";
public static void main(String args[])
{
bb t=new bb();
System.out.println(t.num);
}
}
/***************************************************************************
各位朋友,如上程序所示,aa为bb 的超类,如果在同一个类中定义两个同名,但不同类型的变量,
java编译时都不会成功.但上面的这个程序例外.
也就是说同时存在int num和string num 两个变量,
我想请教的是,如何在bb类中获得int num 的值呢(t.num是string num 的值)?
****************************************************************************/
[解决办法]
关注
[解决办法]
aa a = new bb();
System.out.println(a.num);
[解决办法]
aimer311是对的
bb t=new bb(); //t就是bb的实例,t.num自然就是引用t的变量了
[解决办法]
应该这个叫重载吧。
所以不会发生错误。
[解决办法]
System.out.println(Test.num);
[解决办法]
这没什么以外的。。。。
类的继承是允许父类与子类中同名变量的,但使用过程中是以子类变量为准的:
所以
aa a1 = new bb();
System.out.print(a1.num);// "真的爱你 ";
bb b1 = new bb();
System.out.print(b1.num);// "真的爱你 ";
aa a2 = new aa();
System.out.print(a2.num);// 1
bb b2 = new aa();//错误用法
[解决办法]
要想调用大aa里面的int num
在bb里面使用super.num。就ok了!
[解决办法]
先创建aa类的对象,就能访问了。
[解决办法]
daniel_kaka兄,不要误导别人好吧?
aa a1 = new bb();
System.out.print(a1.num);会输出 "真的爱你 "?
[解决办法]
super.num就OK
[解决办法]
在图形图像里,如何将float 型数据转化成sring类型阿
[解决办法]
呵呵,测试了一下,确实是 AA a = new BB() 确实输出AA里面定义的变量
[解决办法]
虽然super.num就是父类的变量,但是只能在构造器中使用,你可以new 一个父类对象,通过对象调用num的值!
[解决办法]
这样改下
public class aa {
public int num = 1;
public static void main(String... strings) {
bb p = new bb();
System.out.println( "num= " + ((aa) p).num);
System.out.println( "num= " + p.num);
}
}
class bb extends aa {
public int num = 8;
public static void main(String args[]) {
bb t = new bb();
System.out.println(t.num);
}
}
//结果是
num=1
num=8
////////////////////////////
这说明父类、子类的字段不是放在一个空间中,子类不会覆盖父类,子类的实例以子类的面孔出现的时候调用的是子类的该字段,以父类的面孔出现的时候调用的是父类的该字段。两者井水不犯河水。
这跟方法有区别,方法从来都是子类覆盖父类。不管子类的实例以什么面孔出现调用的都是子类的方法
[解决办法]
((aa)p),把对象上溯造型为aa,是这样吗?我连thing in java都还没看完,错了别笑话
[解决办法]
正确的路只有一条,而错误的路有无数条。你只要知道这是正确能用而进入下一次阶段就行了,没必要去反复地问为什么。如果你这样的话,是学不了东西的。
[解决办法]
我觉得有必要弄清楚
一个类是方法+属性(或者叫做函数+成员变量之类的叫法)
对于方法而言,运行时确定调用的方法入口
对于变量而言,是在编译的时候确定的
比如
class Father {
public int num = 1;
public void tellASecret() {
System.out.println( "Father 's secret. ");
}
}
class Son extends Father {
public String num = "hello ";
public static void main(String[] args) {
Son son = new Son();
son.tellASecret();
}
public void tellASecret() {
System.out.println( "Son 's secret. ");
}
}
如果你声明了一个引用,在调用方法的时候会根据运行时的类型调用相应的方法
在通过引用读取变量的时候,是根据引用的声明类型来确定的
也就是说,儿子有什么属性是和老子没关系的,我愿意叫什么叫什么
你用什么样的引用读取,就是什么类型的值。
[解决办法]
什么叫编译期类型?什么叫运行时类型?搞清楚了动态绑定和静态绑定的区别,搞清楚java中只有实例方法可以动态绑定,这样的问题就不要再问了。
[解决办法]
good
[解决办法]
aa a = new bb();
System.out.println(a.num);
