这句对吗,为什么很多书都是这样说
public class A{
private String s=new String("123");
public void out{
System.out.print(s);
}
public class B extends A{
public static void main(String args[])
{
B b=new B();
b.out()
}
如果B没有继承A中的s,为什么又可以输出123如果B没有继承A中的s,s又存在内存的什么地方
在C++中又是怎样的
public class A{
private String s=new String("123");
public void out{
System.out.print(s);
}
public class B extends A{
public static void main(String args[])
{
B b=new B();
b.out()
}
如果B没有继承A中的s,为什么又可以输出123如果B没有继承A中的s,s又存在内存的什么地方
在C++中又是怎样的
Private类型是保护的含义,就是说除了本类的对象以后其他类对象都不能直接访问的,
除非你在基类中提供了接口访问该变量,这是允许的,对于这样的变量一般是用get和set方法来实现赋值和取值的。
yuz_yuz(冲天小飞鱼)既然你说对,那B没有继承A中的s,s又存在内存的什么地方我的观点也是继承了,但不能直接访问
在执行构造方法之前,它会先初始化s.
在java 子类也继承父类的的私有变量和方法。
一个子类只能继承其父类的可访问的成员,并且该子类没有覆盖或者说隐藏父类中的那些可访问成员。
一个类的成员就是指在这个类中所声明的属性和方法,再加上从其父类继承而来的属性和方法。在楼主所举的例子中,s 是 B 所不能访问到的,所以 B 不能从 A 继承这个属性。但是,注意了,呵呵:)
虽然 B 类没有从 A 类继承 s 这个属性,s 仍然是 B 对象的一个属性。因为当一个对象被创建的时候,JVM 就要分配足够的空间给这个队像所有的实例变量,包括在这个对象的类以及其所有父类中定义的所有属性。所以在楼主所举的例中,实例化的 B 的对象可以输出实例变量 s 的内容。
我当然知道,对b来说,它根本就不知道还有s这个变量!,但我问的是s是否存在于b这个对象中,你似乎回避答这个哦,呵呵shxchenwind(秋风扫落叶)
这个应该没有汲及到多态吧我比较倾向于 holy_phoenix(神保佑 祂的儿女)的说法 呵呵
-------------------------------------------------------------------------
您好,网美书店全场5折-8.8折,深圳东莞所有地区送书上门(免配送费),书到付款!网美书店网址:http://www.wanme.com咨询QQ: 419777139
public class B{
private String s=new String("123");
public void out{ System.out.print(s); }
public static void main(String args[])
{
B b=new B();
b.out()
}
}
其他都是OO-Language的编译和运行机理,就不要追究了
有空可以研究其本质
我感觉很迷惑啊,现在有朋友在blog上解释了这个问题并测试了,不过我觉的好象不对,
大家如果有兴趣可以去看看,地址是:
http://blog.csdn.net/holy_phoenix/archive/2005/09/23/487931.aspx?Pending=true
OOP有可能比现在某些程序员还老.
---初学者