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;不知道是什么意思
好像不是赋值吧。 我一直认为它是赋值 所以想不明白 。
请问它到底是什么意思啊 能不能用通俗的语言讲一下 我理解能力不太好! 谢谢!
int a;
int b=1
int c=2
a=b//a=1;
b=c//b=2;
c=a;//c=1 到现在为止b和c和值就互换了.
你的问题也差不多是这个意思了.
如果是赋值的话。 那zilei和zilei2里的那个变量赋给谁了?
抽像类里的没有变量啊,那它是怎么接收zilei和zilei2里那两个变量的值的?
在给出的程序中,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里讲得很清楚。
(类=)
b 、c都采用了a 标准---〉 所以b和c都能放在a能套的螺丝上。
当你申明一个 employee 时 你可以让它来表现 子类1的特性
也可以让它表现子类2的特性
这就是多态了
题名中 分别将 b 和 c 赋值给 a
就是a 引用了一个新的实例
当调用a 的fangfa()时 就会表现 他指向的实例的方法
a=b;是对象变量a指向b引用对象.
a=c;是对象变量a指向c引用对象.
相当于值变了。不过你的类设计很乱。。
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();
这样写
class zilei1{ private int a;
public zilei(int a){ this.a =a ;
} public void fangfa(){ System.out.println("nihaoa! "+ a ) }}