class Base { 
String name; 
public Base(){ 
name="base"; 
}
public Base(String name){
this.name=name;
}
public void mention(){ 
System.out.println(name);} 

class Chila extends Base{

public Chila (String name){
this.name=name;
   } 

class Text{ 
public static void main(String[] args){ 
Chila c=new Chila("bb"); 
c.mention();} 
} 为什么子类继承了父类的mention()方法后 不能修改本类的name值啊?
输出的结果还是“base”

解决方案 »

  1.   

    不是吧,我在我的Java环境下是bb啊
      

  2.   

    LZ你的没错我给您讲下父类(SuperClass)和 子类(SubClass)的关系
    父类的非私有化属性(不同包的子类无法访问default修饰符)和方法可以默认继承到子类。
    Class Son extends Father{
    }
    而如果父类中的私有方法被子类调用的话,则编译报错。
    父类的构造方法子类不可以继承,更不存在覆盖的问题。
    所以子类构造方法默认调用父类的无参构造方法。(所以养成写无参构造的习惯)
    如果子类访问父类的有参构造方法,必须在子类构造方法第一行使用super(参数)
    当构造一个对象的时候,系统先构造父类对象,再构造子类对象。
    Public class BMWcar extends Car{
    Public BMWcar(){
    Super(int alength); //显式的调用父类的构造,默认调用无参构造
    //所以父类没有无参构造的话,子类如果不加显示调用其他构造就会报错。这里的super是一个对父类的引用
    }
    }
    public class Test { public static void main(String[] args) {
    Chila c = new Chila();
    c.mention();
    }}
    class Base1 {
    String name; public Base1() {
    name = "base";
    System.out.println(name);
    }
    }class Chila1 extends Base1 {
    public Chila1() {
    }
    }输出:base
      

  3.   

    列子有误下面这个public class Test { public static void main(String[] args) {
    Chila1 c = new Chila1();
    }}
    class Base1 {
    String name; public Base1() {
    name = "base";
    System.out.println(name);
    }
    }class Chila1 extends Base1 {
    public Chila1() {
    //默认调用父类的无参构造 
    }
    }
      

  4.   

    JDK1.6版本中 CMD 下编译 执行Java之后 输出“bb”。程序无错误;回答完毕!
      

  5.   

    我就是在命令行运行的 是“base”...
      

  6.   

    那他们说在他们的java运行环境下运行是“bb”是怎么回事?
      

  7.   

    我刚才又试了一下 确实是bb 我将文件换了一个地方储存的 可能是本程序引用了以前的文件中的Base类 导致结果错误不过你说的也挺多的 也对 并且给我一段程序 还是要谢谢你