猿问

java,麻烦详细解释下怎么继承的?为什么是‘ Parent Child’

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;

}

}


万千封印
浏览 898回答 3
3回答

牧羊人nacy

这是一个java中成员变量的scope问题。1.父类中非私有变量可以被子类直接继承和访问。需要用super.filed;2.父类中的私有变量可以可以通过set和get方法,向外提供访问接口。3.成员变量只能被继承,不能被重写。不构成多态。只有方法才有多态行。4.父类和子类中的成员变量命名相同是可以的。在代码中表面上看到,该类有两个相同的变量,父类中有一个,子类中有一个。实际上,在内存中他们具有不同存储标识。不同的地址,是不同的对象实例。总结:一个类的变量属于该类所有。非私有的变量可以被子类继承。子类访问父类的变量需要通过父类的访问接口。变量不存在多态。

素胚勾勒不出你

虽然子类重写了父类的属性和方法但是父类引用不可以调用子类特有的方法和属性但是可以调用从父类继承的方法成员方法的调用按照对象的类型,无论用什么类型(父类还是本身),其调用的都是具体对象所在类中定义的方法所以p.name还是父类的属性,而p.get()是子类的方法

慕尼黑5688855

上面说的有点深奥啊 哈哈我就你的问题和你说下你定义了parent类作为父类你有定义了child类作为子类以上就是继承关系,很正确至于你说的,“为什么是‘ Parent Child’ ,而不是 ‘Parent Parent’????”这个大多java开发人员经常犯的小毛病,大多人都会认为“子类会覆盖父类的属性,并且初始化子类后,通过父类调用该属性和子类调用该属性的值应该相同。”其实内在的是这样的:"基类与子类中声明了一个相同名称的属性,基类和子类都可以分别管理自己的属性,且属性值不会被覆盖,即使基类与子类中声明了一个相同名称的静态变量,静态变量的值也不会覆盖。"Thinking in Java 经典话语哈哈
随时随地看视频慕课网APP

相关分类

Java
我要回答