面向对象 引用传递

    -

1.1 引用传递

引用传递 1

class Demo
{
    int temp = 10 ; //定义属性,没有封装,便于操作
}
public class RefDemo01
{
    public static void main(String[] args)
    {
        Demo d1 = new Demo() ; //实例化Demo对象,实例化之后 temp=10
        d1.temp = 20 ;         //修改temp属性内容
        System.out.println("调用fun()方法之前: "+d1.temp) ;

        fun(d1) ;
        System.out.println("调用fun()方法之后: "+d1.temp) ;
    }

    public static void fun(Demo d2) //此处的方法由主方法调用
    {
        d2.temp = 100 ;             //修改temp值
    }
}

引用传递 2

public class RefDemo02
{
    public static void main(String[] args)
    {
        String str1 = "Hello" ; //实例化String对象
        System.out.println("fun()方法调用之前: " + str1) ;

        fun(str1) ;             //调用fun()方法
        System.out.println("fun()方法调用之后: "+str1) ;


    }
    public static void fun(String str2) //定义一个方法
    {
        str2 = "World" ;     //修改字符串内容
    }
}

引用传递 3

class Demo
{
    String temp = "hello" ; //实例化String对象
}
public class RefDemo03
{
    public static void main(String[] args)
    {
        Demo d1 = new Demo() ; //实例化Demo对象
        d1.temp = "world" ;    //没有修改内容,修改的是内存空间地址。
        System.out.println("调用fun()方法之前: "+d1.temp) ;
        fun(d1) ;
        System.out.println("调用fun()方法之后: "+d1.temp) ;
    }
    public static void fun(Demo d2)
    {
        d2.temp = "IronMan" ;   //开辟一个新空间
    }
}

Sting类是一个特殊的类,其内容不可改变,

1.2 引用传递应用

class Person
{
    private String name ;   //声明String对象
    private int age ;       //声明int对象
    private Book book ;     //一个人有一本书
    public Person(String n,int a)   //构造方法
    {
        this.setName(n) ; //为类中属性赋值
        this.setAge(a) ;
    }
    public void setName(String n)
    {
        name = n ;
    }
    public void setAge(int a)
    {
        age = a ;
    }
    public void setBook(Book bk)
    {
        book = bk ;
    }
    public String getName()
    {
        return name ;
    }
    public int getAge()
    {
        return age ;
    }
    public Book getBook()
    {
        return book ;
    }
}
class Book
{
    private String title ;
    private float price ;
    private Person person ; //一本书对应一个人
    public Book(String t,float p)//构造方法
    {
        this.setTitle(t) ;      //给类中属性赋值
        this.setPrice(p) ;      //给类中属性赋值
    }
    public void setTitle(String t)
    {
        title = t ;
    }
    public void setPrice(float p)
    {
        price = p ;
    }
    public void setPer(Person per)
    {
        person = per ;
    }
    public String getTitle()
    {
        return title ;
    }
    public float getPrice()
    {
        return price ;
    }
    public Person getPer()
    {
        return person ;
    }

}
public class RefDemo04
{
    public static void main(String[] args)
    {
        Person per = new Person("IronMan",20) ; //声明并实例化Person对象
        Book bk = new Book("悟空传",19.9f) ;   //声明并实例化Book对象
        per.setBook(bk);        //调用set()方法,设置两个对象关系,一个人有一本书
        bk.setPer(per) ;        //调用set()方法,设置两个对象关系,一本书对应一个人
        System.out.println("从人找到书-->"+"姓名:" +per.getName()+",年龄:"+per.getAge()+
                        ",对应的书名:"+per.getBook().getTitle()+",价格:"+per.getBook().getPrice()) ;
        System.out.println("从书找到人-->"+"书名: "+bk.getTitle()+",价格:"+bk.getPrice()+
                        ",对应的人名:"+bk.getPer().getName()+",年龄:"+bk.getPer().getAge()) ;
    }
}

延伸
增加一个孩子属性

class Person
{
    private String name ;   //声明String对象
    private int age ;       //声明int对象
    private Book book ;     //一个人有一本书
    private Person child ;//一个人有一个孩子
    public Person(String n,int a)   //构造方法
    {
        this.setName(n) ; //为类中属性赋值
        this.setAge(a) ;
    }
    public void setName(String n)
    {
        name = n ;
    }
    public void setAge(int a)
    {
        age = a ;
    }
    public void setBook(Book bk)
    {
        book = bk ;
    }
    public void setChild(Person cld)
    {
        child =cld ;
    }
    public String getName()
    {
        return name ;
    }
    public int getAge()
    {
        return age ;
    }
    public Book getBook()
    {
        return book ;
    }
    public Person getChild()
    {
        return child ;
    }
}
class Book
{
    private String title ;
    private float price ;
    private Person person ; //一本书对应一个人
    public Book(String t,float p)//构造方法
    {
        this.setTitle(t) ;      //给类中属性赋值
        this.setPrice(p) ;      //给类中属性赋值
    }
    public void setTitle(String t)
    {
        title = t ;
    }
    public void setPrice(float p)
    {
        price = p ;
    }
    public void setPer(Person per)
    {
        person = per ;
    }
    public String getTitle()
    {
        return title ;
    }
    public float getPrice()
    {
        return price ;
    }
    public Person getPer()
    {
        return person ;
    }

}
public class RefDemo04
{
    public static void main(String[] args)
    {
        Person per = new Person("IronMan",20) ; //声明并实例化Person对象
        Person chi = new Person("SpiderMan",10) ;
        Book bk = new Book("悟空传",19.9f) ;   //声明并实例化Book对象
        Book b = new Book("西游日记",20.5f) ;
        per.setBook(bk);        //调用set()方法,设置两个对象关系,一个人有一本书
        bk.setPer(per) ;        //调用set()方法,设置两个对象关系,一本书对应一个人
        per.setChild(chi) ;     //一个人有一个孩子
        chi.setBook(b) ;        //一个孩子有一本书
        b.setPer(chi);          //一本书对应一个孩子

        System.out.println("从人找到书-->"+"姓名:" +per.getName()+",年龄:"+per.getAge()+
                        ",对应的书名:"+per.getBook().getTitle()+",价格:"+per.getBook().getPrice()) ;
        System.out.println("从书找到人-->"+"书名: "+bk.getTitle()+",价格:"+bk.getPrice()+
                        ",对应的人名:"+bk.getPer().getName()+",年龄:"+bk.getPer().getAge()) ;
        System.out.println(per.getName()+"的孩子"+per.getChild().getName()+"的年龄"+per.getChild().getAge()+
                        "书名"+chi.getBook().getTitle()+"价格"+chi.getBook().getPrice()) ;
    }
}

你可能感兴趣的:(Java)