[code="java"]public class Test
{
public static void main(String[] args)
{
Parent p = new Child();
System.out.println(p.name);
System.out.println(p.get());
}
}
class Parent
{
String name = "Parent";
public String get()
{
return name;
}
}
class Child extends Parent
{
String name = "Child";
public String get()
{
return name;
}
}[/code]
这是一个java中成员变量的scope问题。
1.父类中非私有变量可以被子类直接继承和访问。需要用super.filed;
2.父类中的私有变量可以可以通过set和get方法,向外提供访问接口。
3.成员变量只能被继承,不能被重写。不构成多态。只有方法才有多态行。
4.父类和子类中的成员变量命名相同是可以的。在代码中表面上看到,
该类有两个相同的变量,父类中有一个,子类中有一个。实际上,在内存中他们
具有不同存储标识。不同的地址,是不同的对象实例。
总结:一个类的变量属于该类所有。非私有的变量可以被子类继承。子类访问父类
的变量需要通过父类的访问接口。变量不存在多态。
虽然子类重写了父类的属性和方法
但是父类引用不可以调用子类特有的方法和属性
但是可以调用从父类继承的方法
成员方法的调用按照对象的类型,无论用什么类型(父类还是本身),其调用的都是具体对象所在类中定义的方法
所以p.name还是父类的属性,而p.get()是子类的方法
回答问题的答案必须大于5个字
其实我就想说一个字
对
上面说的有点深奥啊 哈哈
我就你的问题和你说下
你定义了parent类作为父类
你有定义了child类作为子类
以上就是继承关系,很正确
至于你说的,“为什么是‘ Parent Child’ ,而不是 ‘Parent Parent’????”
这个大多java开发人员经常犯的小毛病,大多人都会认为
“子类会覆盖父类的属性,并且初始化子类后,通过父类调用该属性和子类调用该属性的值应该相同。”
其实内在的是这样的:
"基类与子类中声明了一个相同名称的属性,基类和子类都可以分别管理自己的属性,且属性值不会被覆盖,即使基类与子类中声明了一个相同名称的静态变量,静态变量的值也不会覆盖。"
Thinking in Java 经典话语
哈哈