繁体   English   中英

使用对象引用变量调用方法

[英]calling methods using object reference variable

我在SCJP书中读到了序列化的一个例子。 下面我发布了该示例源代码

import java.io.*;
public class SerializeDog {
    public static void main(String[] args) {
        Collar c = new Collar(3);
        Dog d = new Dog(c, 5);
        System.out.println("before: collar size is "+ d.getCollar().getCollarSize());
        try {
            FileOutputStream fs = new FileOutputStream("testSer.ser"); 
            ObjectOutputStream os = new ObjectOutputStream(fs);
            os.writeObject(d);
            os.close();
        }catch (Exception e) { 
            e.printStackTrace(); 
        }
        try {
            FileInputStream fis = new FileInputStream("testSer.ser");
            ObjectInputStream ois = new ObjectInputStream(fis);
            d = (Dog) ois.readObject();
            ois.close();
        } catch (Exception e) { 
            e.printStackTrace(); 
        }
        System.out.println("after: collar size is "**+ d.getCollar().getCollarSize());**
    }
}

class Dog implements Serializable {
    private Collar theCollar;
    private int dogSize;
    public Dog(Collar collar, int size) {
        theCollar = collar;
        dogSize = size;
    }
    public Collar getCollar() { 
        return theCollar; 
    }
}

class Collar implements Serializable {
    private int collarSize;
    public Collar(int size) { 
        collarSize = size; 
    }
    public int getCollarSize() { 
        return collarSize; 
    }
}

我想知道什么时候调用d.getCollar().getCollarSize(); 哪个方法被执行...请在java中解释这是什么样的方法调用。 我们怎样才能使用这样的两种方法。

我想知道什么时候调用d.getCollar().getCollarSize(); 哪个方法被执行...

JAVA在对象d上调用/执行gettCollar() ,并返回Color的实例。 getCollarSize()将在被调用Collar由返回的实例d.getColor()方法。

这是如何,我们链接方法调用。

您可以将方法调用分为两个步骤

Collar collar = d.getCollar();
int collarSize = co.getCollarSize();
object.firstMethod().secondMethod().thirdMethod()

执行总是从左到右 Object firstMethod() ,它返回一些object并且调用secondMethod() ,返回一些Object并调用thirdMethod() ,依此类推...

在你的情况下, d.getCollar().getCollarSize() d是类Dog的对象,在其上调用getCollar()方法,该方法返回Collar实例,同时再调用getCollarSize()

这称为方法链接

在你的评论中如果我没有错,你想问它是一个正常的未实例变量,以及如何调用它的方法?

    Collar c = new Collar(3);
    Dog d = new Dog(c, 5);

在上面两行中首先创建Dog类的Collar实例和Call Parameterised构造函数。

private Collar theCollar;
private int dogSize;
public Dog(Collar collar, int size) {
    theCollar = collar;
    dogSize = size;
}

在上面的代码中,您将Collar的实例化对象分配给private Collar theCollar;

d.getCollar()返回一个'Collar'类型的对象,你在这个对象上调用第二个方法getCollarSize()。

与此声明相同:

Collar co = d.getCollar();//invoke the getCollar method of a Dog object
int size = co.getCollarSize();//invoke the getCollarSize of a Collar object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM