java,麻烦详细解释下怎么继承的?为什么是‘ Parent Child’ ,而不是 ‘Parent Parent’????或其他???/

[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]

4个回答

这是一个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 经典话语
哈哈

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐