class Square
{
int leght;
Square(int len)
{
leght=len;
}
void getPer()
{
System.out.println(":"+(4*leght));
}
}
class Rectang extends Square
{
int width;
Rectang(int len,int wid)
{
super(len);
width=wid;
}
void getPer()
{
System.out.println(":"+(2*(leght+width)));
}
}
public class Calculate
{
public static void main (String[] args)
{
Square sq=new Square(15);
sq.getPer();
Rectang re=new Rectang(8,19);
//Square re=new Rectang(8,19);
re.getPer();
}
}
看上面的红色代码部分,Rectang是继承自Square的子类,在创建Rectang对象实例时,以上两端红色代码的效果有啥不同?
我看过结果都一样,"Square re"与"Rectang re"有啥区别?在继承中象这种前面是父类名,后面是子类名创建对象的方法,能说明一下么?不太明白.
----------------解决方案--------------------------------------------------------
在这里是一样的,虚拟机采用的绑定规则是:
(1)实例方法与引用变量按实际引用的对象方法绑定,在这里即Rechtang类对象
(2)静态方法与引用变量按声明的类型方法来绑定,在这里即Rechtang父类Square
(3)成员变量与引用变量按所声明的类型的成员变量绑定
1是属于动态绑定,2,3属于静态绑定.
本题中属第一种,如果子类没有getPer()实例方法,即向上父类调用,调用父类的实例方法!
----------------解决方案--------------------------------------------------------
在这里是一样的,虚拟机采用的绑定规则是:
(1)实例方法与引用变量按实际引用的对象方法绑定,在这里即Rechtang类对象
(2)静态方法与引用变量按声明的类型方法来绑定,在这里即Rechtang父类Square
(3)成员变量与引用变量按所声明的类型的成员变量绑定
1是属于动态绑定,2,3属于静态绑定.
本题中属第一种,如果子类没有getPer()实例方法,即向上父类调用,调用父类的实例方法!
我记得前段时间有几个这样的帖
----------------解决方案--------------------------------------------------------