abstract class Employee {
    
    abstract void fangfa();
    public static void main(String args[])
    {
        Employee a;
        zilei b =new zilei();
        zilei2 c= new zilei2();
        a=b;
        a.fangfa();
        a=c;
        a.fangfa();    }
}class zilei extends Employee
{   int a=10;
    void fangfa()
    {
        System.out.println("啊啊啊啊"+a);
    
    }
}class zilei2 extends Employee
{   int a=20;
    void fangfa()
    {
        System.out.println("哈哈哈俣"+a);
    
    }
}上面这代码里的a=b; a=c;不知道是什么意思
好像不是赋值吧。 我一直认为它是赋值 所以想不明白  。
请问它到底是什么意思啊 能不能用通俗的语言讲一下 我理解能力不太好! 谢谢!

解决方案 »

  1.   

    是赋值啊.
    int a;
    int b=1
    int c=2
    a=b//a=1;
    b=c//b=2;
    c=a;//c=1 到现在为止b和c和值就互换了.
    你的问题也差不多是这个意思了.
      

  2.   

    晕了看不懂楼上说的。 
    如果是赋值的话。 那zilei和zilei2里的那个变量赋给谁了?
    抽像类里的没有变量啊,那它是怎么接收zilei和zilei2里那两个变量的值的?
      

  3.   

    学java被这样的问题困扰N长时间真不值啊
      

  4.   

    子类is-a父类,也就是说一个子类的instance is-a父类的instance。
    在给出的程序中,b是一个zilei的instance,同时也是一个Employee的instance。那zilei和zilei2里的那个变量赋给谁了?
    抽像类里的没有变量啊,那它是怎么接收zilei和zilei2里那两个变量的值的?==>那些变量和方法没有赋给谁,它们还在自己的instance里面乖乖呆着呢。问题的关键在于怎么才能使用这些变量和方法。对方法来说,a.fangfa();运行的方法是有a的runtime type,也就是具体instance的类型来决定的,a所reference的值是zilei的一个instance,所以对于方法来说,就是zilei的这个instance的方法会运行。对于变量来说,a.someValue;是有reference variable type决定的,也就是a的type决定的,也就是Employee。如果Employee里面定义了变量,那么它们可以通过a.someValue;使用,但是不可以通过a使用子类里的变量。仔细读书,这些都在Java Language Specification里讲得很清楚。
      

  5.   

    螺丝和螺母的问题。
    (类=)
    b 、c都采用了a 标准---〉 所以b和c都能放在a能套的螺丝上。
      

  6.   

    这个题名是一个测试多态的例子 
    当你申明一个 employee 时 你可以让它来表现 子类1的特性
    也可以让它表现子类2的特性
    这就是多态了
    题名中 分别将 b 和 c 赋值给 a
    就是a 引用了一个新的实例
    当调用a 的fangfa()时 就会表现 他指向的实例的方法
      

  7.   

    是引用。
    a=b;是对象变量a指向b引用对象.
    a=c;是对象变量a指向c引用对象.
    相当于值变了。不过你的类设计很乱。。
      

  8.   

    你说的问题,其实很简单,在声明的时候你的zilei1 b = new zilei1();和zilei2 c = new zilei2();是多余的.你可以直接用Employee a = new zilei1();然后a.fangfa();因为Employee是父类,所以你可以创建他的类型,但是他是抽象类,不能创建实例.但是可以引用实例化过的子类,就像上面那样写.
    a = b ; 就是说,本来你b是zilei1 的一个变量,引用了zilei1的对象,也就是你zilei1里的方法,现在却把这个zilei1类型变量b引用给了Employee a类,也就是把new zilei1();这个引用给了a .
    在JAVA里面父类类型,可以引用子类类型,因为父类有的东西,子类都有,所以可以直接引用子类,同样,子类类型也可以引用父类的对象,但是这样就需要强制转换了,而且很可能出现异常,导致程序出错,要转换可以这样
    fulei a = new fulei();
    a.fangfa();
    zilei b = (zilei)a.fangfa();
      

  9.   

    在变量域里面一样要用private修饰符号,比如你的zilei1里面的int a = 10;这样容易导致出错,也就是说,可能会在你的main方法里调用这个域值进行修改,那样JAVA的封装的意义也就丢失了,所以一定要这样写private int a =10 ; 最好要自己定义构造器,不要使用系统默认的构造器,
    这样写
    class zilei1{   private int a;
        
       public zilei(int a){        this.a =a ;
       
       }   public void fangfa(){       System.out.println("nihaoa! "+ a )   }}