2019-03-14

值传递,引用传递(址传递),String传递

image.png

image.png

image.png

image.png

对象的一对一关系

双向一对一:
单相一对一:

… java中对象的对应关系有很多种,比如单向一对一,双向一对一,一对多,多对一,多对多等,其实现原理相同,接下来,我们详解一对一关系。

说明:
… 所谓的一对一就好比如一个丈夫对应了一个妻子,一本书对应了一个作者,如果我想只实例化一个丈夫对象,来获得丈夫的妻子的名字、年龄,这就需要两个对象产生关系了。

实现思路:
在丈夫类中实例化一个妻子的对象,作为丈夫类中的一个属性,在实例化丈夫这个对象的时候,顺便传进去妻子的对象即可,两个对象就产生了关系

应用:
在以后的编程中,两个对象相隔10万八千里,而两个对象偶尔在不同的地方要调用对方,可以创建关系,一句简单的代码轻松搞定

代码实例:
我要创建一个英雄类 class Hero
又创建了一个武器类 class Weapon
一个英雄要对应一个武器,假如我想通过英雄来找到他对应的武器和武器的属性,就需要两个类建立关系:

在test这个包下面有三个类,分别是Hero、Weapon、One2One(包含主函数)

/**
*  英雄类,定义了英雄的 名字和年龄 ,并且封装起来了
*/
package test;
import test.Weapon;   //导入武器类
class Hero {
    private String name;      //属性私有化 ,防止外面直接赋值和调用
    private int age;
    
    private Weapon weapon;  //声明一个武器类的对象 (私有化)
    
    //  向外界提供一个可以设置和获取 武器类对象的方法
    public void setWeapon(Weapon weapon) {
        this.weapon = weapon;
    }
    public Weapon getWeapon() {
        return weapon;
    }
    
    // 构造方法 ,方便创建对象时直接赋值。
    public Hero() {}    //默认的构造方法,一般要保留
    public Hero(String name,int age) {
        this.name = name;
        this.age = age;
    }
    
    // getter and setter 方法
    //向外界提供可以获取和设置本类对象 属性的方法
    public void setName(String name) {
        this.name=name;
    }
    public String getName() {
        return name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }
}
/**
* 代码和上面的英雄类完全相同
*/
package test;
import test.Hero;
class Weapon {

    private String name;
    private int age;
    
    private Hero hero;   //声明一个对象
    public void setHero(Hero hero) {
        this.hero = hero;
    }
    public Hero getHero() {
        return hero;
    }
    
    
    public Weapon() {}
    public Weapon(String name,int age) {
        this.name = name;
        this.age = age;
    }
    
    
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }
}

主函数:

/**
 * 面向对象的一对一关系
 */
package test;
import test.Hero;
import test.Weapon;
public class One2One {
    public static void main(String[] args) {
        Hero hero = new Hero("刘备",35);  //实例化一个对象,并且赋值
        Weapon weapon = new Weapon("双股剑",3);
        //建立关系  ,(一句代码搞定)
        hero.setWeapon(weapon);  //把武器类对象设置成英雄类中的一个属性
        weapon.setHero(hero);
        //输出结果,用英雄类查找其武器
        System.out.println("我的名字叫"+hero.getName()+",我现在"+hero.getAge()+"岁了,我用的武器是"+hero.getWeapon().getName()+",等级为"+hero.getWeapon().getAge()+"级。");
                            //我的名字叫刘备,我现在35岁了,我用的武器是双股剑,等级为3级。  

        hero.setAge(350);  //修改其属性
        weapon.setName("生锈的双股剑");
        weapon.setAge(2);
        
        //Hero h = weapon.getHero();
        //用武器查找其主人
        System.out.println("我是"+weapon.getName()+",我的等级已经降落为"+weapon.getAge()+"级了,                 我的主人是"+weapon.getHero().getName()+",现在已经"+weapon.getHero().getAge()+"岁了");
                                //我是生锈的双股剑,我的等级已经降落为2级了,我的主人是刘备,现在已经350岁了

    }

}

你可能感兴趣的:(2019-03-14)