Java 面向对象 之 对象引用 this的引用

简介:

http://www.verejava.com/?id=16992770416239

/**
    对象与对象, this的引用
    题目:我把书借给朋友,朋友看完归还书
    思路:
        1. 从题目的名词找出对应的类 朋友(Friend) ,我(Person),书(Book)
        2. 找出类与类之间的关系 书是属于我的  Book->Person
           朋友是属于我的朋友 Friend->Person 但是必须经过我的同意才能成为我的朋友
        3. 通过2就可以知道 a->b 就在 b中要添加一个a 的引用对象
        4. 从题目的动词 抽象出 方法  借给(lend) Book->Friend
*/
public class Refenrence1 {
    
    public static void main(String[] args) {
        //实例化我的对象
        Person p = new Person();
        p.setName("胡杨");
        //实例化一本java编程书籍,并添加到我里面
        p.setBook(new Book("Java编程书籍"));
        //打印我拥有的书籍名称
        System.out.println(p.getName() + " 拥有一本 " + p.getBook().getBookName());

        //实例化一个朋友对象
        Friend friend = new Friend();
        friend.setName("李阳");

        //将李阳设置成我的朋友,当然我也成为李阳的好朋友
        p.setFriend(friend);

        //打印我的好朋友
        System.out.println("我的好朋友是 : " + p.getFriend().getName());

        //然后把书借给朋友
        p.lendBook();

        //朋友打印拥有的书籍
        System.out.println(friend.getName() + " 也可以读 " + friend.getBook().getBookName() + " 了");

        //归还书籍
        friend.setBook(null);
        //打印我拥有的书籍名称
        System.out.println(friend.getName() + " 也可以读 " + friend.getBook().getBookName() + " 了");
        System.out.println(p.getName() + " 拥有一本 " + p.getBook().getBookName());

        //然后我检查一下我的书籍发现李阳把书弄坏了,断绝朋友关系
        p.setFriend(null);
        System.out.println("我的朋友是: " + p.getFriend());
    }
}

class Friend {
    
    private String name;
    private Book book;//借给我的书的引用
    private Person person;//我也是朋友的好朋友

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Book getBook() {
        return book;
    }

    public void setBook(Book book) {
        this.book = book;
    }

    public Person getPerson() {
        return person;
    }

    public void setPerson(Person person) {
        this.person = person;
    }
}

class Person {
    
    private String name;
    private Book book;//book属于我,添加一个Book对象的引用
    private Friend friend; //friend是我的朋友, 添加一个Friend对象引用

    //把书借给朋友
    public void lendBook() {
        friend.setBook(book);
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Book getBook() {
        return this.book;
    }

    public void setBook(Book book) {
        this.book = book;
    }

    public Friend getFriend() {
        return this.friend;
    }

    public void setFriend(Friend friend) {
        //你是我的好朋友
        this.friend = friend;
        //我也是你的好朋友
        friend.setPerson(this);
    }
}

class Book {
    
    private String bookName;

    public Book(String bookName) {
        this.bookName = bookName;
    }

    public String getBookName() {
        return this.bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
}

http://www.verejava.com/?id=16992770416239

目录
相关文章
|
1月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
25 1
|
2月前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
2月前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
26 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
3月前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
62 17
|
2月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
2月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
45 2
|
3月前
|
存储 Java 数据管理
Java零基础-Java对象详解
【10月更文挑战第7天】Java零基础教学篇,手把手实践教学!
38 6
|
3月前
|
Oracle Java 关系型数据库
重新定义 Java 对象相等性
本文探讨了Java中的对象相等性问题,包括自反性、对称性、传递性和一致性等原则,并通过LaptopCharger类的例子展示了引用相等与内容相等的区别。文章还介绍了如何通过重写`equals`方法和使用`Comparator`接口来实现更复杂的相等度量,以满足特定的业务需求。
35 3
|
3月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
3月前
|
存储 Java 数据管理
Java零基础-Java对象详解
【10月更文挑战第3天】Java零基础教学篇,手把手实践教学!
43 1