Java有一个关系

Java有一个关系,java,inheritance,relationship,Java,Inheritance,Relationship,下面这句话是否正确。“男人最好的朋友是狗。” 在人身上多加一个“n”,否则这似乎是合理的。看起来狗应该按类型来区分,因为人可以有其他“最好的朋友类型”: 更新 最接近真实的实时实施方式如下所示: public interface Friend {} public class Man implements Friend {} public class Dog implements Friend {} public class FriendRelationship { private

下面这句话是否正确。“男人最好的朋友是狗。”


在人身上多加一个“n”,否则这似乎是合理的。

看起来狗应该按类型来区分,因为人可以有其他“最好的朋友类型”:

更新

最接近真实的实时实施方式如下所示:

public interface Friend {}

public class Man implements Friend {}

public class Dog implements Friend {}

public class FriendRelationship {
    private Friend first;
    private Friend second;

    public FriendRelationship(Friend first, Friend second) {
        this.first = first;
        this.second = second;
    }
}

Man aPerson = new Man();
Dog aBog = new Dog();
FriendRelationship bestFriends = new FriendRelationship(aPerson, aDog);

这样可以表达任何实体之间的朋友关系。不需要公共基类。您只需要实现
Friend
接口。

我认为编写以下内容更为正确:

public class Man extends Entity {
     private Entity bestFriend = new Dog(); // Where Dog extends Entity
     //etc
}
为什么??假设您有一组不同的实体,例如
,和
。然后让它们各自扩展一个
实体
类是有意义的,该类指定每个实体应该具有的各种属性。那么,每一个都可以有一个
最佳朋友
属性,该属性可以是任何其他
实体

然而,正如评论中所指出的,允许在构造函数中指定一个
bestFriend
更为正确:

public class Man extends Entity {
    private Entity bestFriend;

    public Main(Entity bestFriend) {
        this.bestFriend = bestFriend;
    }
    //etc
}

...

Dog bobDog = new Dog();
Man bob = new Man(bobDog);

这样,bestFriend就是指向狗的指针(或引用)。

我不确定所有的
狗都是
朋友
如果
bestFriend
是通过
上的构造函数或变异子传入的,那么我认为这将是一个更好的例子。我同意@krock,当前的实现意味着
Man
的所有实例都将有一个
bestFriend
,这是一个
Dog
@JasonBraucht是真的,我在想,但为了简洁起见排除了构造函数。我不确定
实体
是否是这个继承层次结构根的最佳名称。也许
动物
哺乳动物
会起作用,甚至
活生物体
。但是
实体
是如此的泛化以至于毫无意义。对象应该表示与名词相同的事物,几乎任何可以用名词表示的事物都是一个实体。@AdamMihalcin我明白你的意思,并且大多数人都同意,但是“信任”和“希望”不是实体:没有上下文,这样的问题不会有结果。在你的例子中,每个男人都有一个最好的朋友,而且恰恰是一个。狗是所有男人最好的朋友的名字,所以这是不合理的<代码>所有人都有一条狗,这是我翻译的最好的朋友类型。至少切换BestFriend和dog。简单地调用BestFriend并不一定能做到这一点
BestFriend
可以很容易地实现为具有像
quack()
这样的方法,并且无论您如何称呼它,
dog
cat
,它都可以
quack()
。更适合创建一个具体的类
Dog
,或者使用接口创建一个更抽象的类,这些接口可以让您通过构造函数或set函数定义这个
Mann
的好友是什么。@duffymo我们发现比光还快,我们飞到了宇宙的边缘,我们经过已知的宇宙之外
[segmentation fault][core dumped]
:)@userunknown Man应该有一个朋友数组,其中包含指向某个朋友的bestFriend指针
public class Man extends Entity {
     private Entity bestFriend = new Dog(); // Where Dog extends Entity
     //etc
}
public class Man extends Entity {
    private Entity bestFriend;

    public Main(Entity bestFriend) {
        this.bestFriend = bestFriend;
    }
    //etc
}

...

Dog bobDog = new Dog();
Man bob = new Man(bobDog);
public class Man extends world.life.animalia.chordata.mammalia.primates.hominidae.hominini.homo.Homo_sapiens {
    private world.life.animalia.chordata.mammalia.carnivora.canidae.canis.c_lupus.CanisLupusFamiliaris dog = new world.life.animalia.chordata.mammalia.carnivora.canidae.canis.c_lupus.CanisLupusFamiliaris();
    private concept.population.social.Friend bestFriend = dog;
}