当前位置: 代码迷 >> Java相关 >> 在继承中,创建对象的一个问题
  详细解决方案

在继承中,创建对象的一个问题

热度:240   发布时间:2007-10-01 10:00:49.0
在继承中,创建对象的一个问题

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()实例方法,即向上父类调用,调用父类的实例方法!


----------------解决方案--------------------------------------------------------
以下是引用zhufeifei在2007-10-1 13:29:39的发言:

在这里是一样的,虚拟机采用的绑定规则是:
(1)实例方法与引用变量按实际引用的对象方法绑定,在这里即Rechtang类对象
(2)静态方法与引用变量按声明的类型方法来绑定,在这里即Rechtang父类Square
(3)成员变量与引用变量按所声明的类型的成员变量绑定

1是属于动态绑定,2,3属于静态绑定.
本题中属第一种,如果子类没有getPer()实例方法,即向上父类调用,调用父类的实例方法!

我记得前段时间有几个这样的帖


----------------解决方案--------------------------------------------------------
  相关解决方案