java构造方法

来源:百度知道 编辑:UC知道 时间:2024/04/28 23:20:16
class Animal
{
int height,weight;
Animal(int x,int y)
{
System.out.println("abc");
}
}
class Fish extends Animal
{
void breathe()
{
System.out.println("Fish bubble");
}
class Integration
{
static void fn(Animal an)
{
an.breathe();
}

public static void main(String[] args)
{
Fish fh=new Fish();
Animal x;
x=fh;
Integration.fn(x);
}

为什么Animal x 不用new就可以使用

Animal x实际上是间接new了。因为已经有fh new了一个Fish,那fh就是那个new Fish,然后Animal x就声明了一个Animal,然后fh那条鱼给了x。
所以,Animal x实际上和Fish fh是一模一样。Animal x靠Fish fh的实例来实例化了。

Fish fh=new Fish();
Animal x;
x=fh;
这几句可以用一句来概括:
Animal x=new Fish();

你仔细看,你根本就没用到 Animal的对象 只是用到了他的类型,就象楼上说的是 父类的引用指向了子类的对象,
static void fn(Animal an)
{
an.breathe();
}
要的就是一个一个父类的类型,所以你传给他 传 Fish fh=new Fish(); fh 也是可以的,只是这样写比较灵活 例如 要是还有一个 class Cat extends Animal 那么 Cat cat = new Cat(); fh(cat) 也是可以的 参数里面写一个父类的类型 用起来比较灵活!

父类引用指向子类对象。

因为你new了子类Fish,把子类对象赋给父类时不用new关键字,这是java的一种语法.