先上代码
class Yz_21 {
protected static String c = "父类Yz_20变量c"; public static void aa(Yz_20 l) {
System.out.println("父类Yz_20中的aa方法");
} protected String bb(String a, String b) {
a = "父类Yz_20中的bb方法";
b = "字符串b";
        c = a+b;    //this.c=a+b;
System.out.println(c);
return c;  //return this.c;
} public static void main(String[] args) {
System.out.println(c);
Yz_20.bb("a", "b");
System.out.println(c);
}}
代码如上所示,输出结果:
父类Yz_20变量c
父类Yz_20中的bb方法  字符串b 
父类Yz_20变量c问题:
1.成员变量c 和成员方法 bb()中的c 是一样吗?
    我理解的是一样的,我注释了//this.c=a+b; //return this.c; 和不用this引用的结果是一样的,
2.成员方法 bb()中的return c,怎么理解?
    c在方法中的取值是父类Yz_20中的bb方法  字符串b ,return c 是将方法中的c值返回,我想既然返回,那么第二个System.out.println(c); c的输出值应该是父类Yz_20中的bb方法  字符串b ,可实际输出值是父类Yz_20变量c,return c;有结束这个方法的意思,这个c 应该和方法中的String保持一致,
3.这个return c 怎么理解,c的取值是多是,return是返回值,那么这个c的值返回到哪里去了?
4.类名.静态类成员  类名调用只能是静态方法吗?
    Yz_20.bb("a", "b");这样调用,并没有提示错误啊,bb也不是静态方法,Yz_20.bb("a", "b")a和b是字符串a、b,protected String bb(String a, String b)  中的a、b 是变量?方法调用中的a、b是对String a,String b的赋值吗? 它们之间应该怎门理解?求解,谢谢

解决方案 »

  1.   

    不知道你这是怎么运行成功地,静态方法必须调静态方法,你那怎么会没错了,还有你的输入也有问题,下面是我的输出:public class JavaSeTest {
    protected static String c = "父类Yz_20变量c"; public static void aa(JavaSeTest l) {
    System.out.println("父类Yz_20中的aa方法");
    } protected String bb(String a, String b) {
    a = "父类Yz_20中的bb方法";
    b = "字符串b";
    c = a + b; // this.c=a+b;
    System.out.println(c);
    return c; // return this.c;
    } public static void main(String[] args) {
    System.out.println(c);
    new JavaSeTest().bb("a", "b");
    System.out.println(c);
    }
    }
    父类Yz_20变量c
    父类Yz_20中的bb方法字符串b
    父类Yz_20中的bb方法字符串b
      

  2.   

    1. 是一样的
    2. 方法运行结束后,返回的结果为c的值
    3. c的值返回到调用那个方法的objec那里了。 比如  String result = bb(), c的值就赋给result了
    4. 不明白什么意思
      

  3.   

    class Yz_20
    {
    protected static String c = "父类Yz_20变量c"; public static void aa(Yz_20 l)
    {
    System.out.println("父类Yz_20中的aa方法");
    } protected String bb(String a, String b)
    {
    a = "父类Yz_20中的bb方法";
    b = "字符串b";
    String c = a + b; // this.c=a+b;
    System.out.println(c);
    System.out.println(this.c); return c; // return this.c;
    } public static void main(String[] args)
    {
    System.out.println(c); Yz_20 yz_20 = new Yz_20();
    String returnC = yz_20.bb("a", "b"); System.out.println(returnC);
    }}首先声明,我也没学多久就20天,我对你提出的是这么理解的:1、成员变量c和方法里的变量c不一样 外面的可以拿到方法里面用,但是外面读不到方法里的。你这里的操作相当于把a+b的结果赋值给外面的c,参见我写的里面方法内又声明了个c,如果方法内的c和外面的c是一个java不允许重复声明的,所以不一样,我写的里面c是方法内的,this.c是全局的(就是类里面声明的那个c,应该叫全局变量吧),
    2、return c后没接收,参见main里面的returnC接收返回值3、解释同2,没有接收值,你的是打印你更改后的全局变量c4、您的类名很有点点问题,您写的这个类是21,调用的20的静态方法,所以我很纠结看不到类编号20的那个,我猜测是同包原因,所以输出结果实际是编号为20的那个类里面的静态方法
    方法上面写的是形式变量,我自己理解为调用时候就是把
    String a="a";
    String b="b";
      

  4.   

    package yz;class Yz_21 {
    protected static String c = "父类Yz_20变量c"; public static void aa(Yz_20 l) {
    System.out.println("父类Yz_20中的aa方法");
    } protected String bb(String a, String b) {
    a = "父类Yz_20中的bb方法";
    b = "字符串b";
        c = a+b;
    System.out.println(c);
    return c;
    } public static void main(String[] args) {
    System.out.println(c);
    Yz_20.bb("a", "b");
    System.out.println(c);
    }}
    完整的代码
      

  5.   


    package yz; class Yz_20 {
       protected static String c="父类Yz_20变量c";
       public static void aa(Yz_20 l){
       System.out.println("父类Yz_20中的aa方法");
       }
       protected static String bb(String a,String b){
       a="父类Yz_20中的bb方法";
       b=" 字符串b ";
       String c=a+" "+b;
       System.out.println(c);
       return c;
       }
       
    } public class Yz_19 extends Yz_20{
     public Yz_19(){
     System.out.println("Lz_19的构造方法");
     }
     public String bb(){
     System.out.println("子类Yz_19中的bb方法");
     return "返回bb方法";
     }
     public static void main(String[] args){
     Yz_19 p=new Yz_19();
     Yz_20 q=new Yz_20();
     aa(p);  
    Yz_20.bb("a","c"); 
    q.bb("a", "b");
    p.bb();

     
     }
     }
    完整的代码
      

  6.   

    package com.nyohh.test1;public class Yz_21
    {
    protected static String c = "Yz_21变量c"; public static void aa(Yz_20 l)
    {
    System.out.println("Yz_21中的aa方法");
    } protected String bb(String a, String b)
    {
    a = "Yz_21中的bb方法";
    b = "Yz_21中的字符串b";
    c = a + b; 
    // this.c=a+b;
    //String c=a+b//区分这个,方法体内部声明的c和前面的this.c
    System.out.println(c);
    return c; // return this.c;
    } public static void main(String[] args)
    {
    System.out.println(c);
    Yz_20.bb("a", "b");//是输出的类20的里面的静态方法bb,区分Yz_21.bb,Yz_21.bb不是静态方法执行不了的
    System.out.println(c);
    }}class Yz_20
    {
    protected static String c = "父类Yz_20变量c"; public static void aa(Yz_20 l)
    {
    System.out.println("父类Yz_20中的aa方法");
    } protected static String bb(String a, String b)
    {
    a = "父类Yz_20中的bb方法";
    b = "Yz_20中的字符串b ";
    String c = a + " " + b;
    System.out.println(c);
    return c;
    }
    }整理完毕,看输出
      

  7.   

    问题1:不是 首先理解2个c变量的作用域不同
        2:bb方法中的c是局部变量,在方法调用结束这个c变量就不存在了
        3:return回来的值你没有用 所以你这个方法其实调了和没调一样
        4:静态方法里只能调静态方法,你的bb方法不是静态的 所以不能在main方法里用,你可以直接bb("a","b")但不可以Yz_20.bb("a", "b")这样用