首页 > 编程语言 >Java中类与类、类与接口、接口与接口之间是什么关系?

Java中类与类、类与接口、接口与接口之间是什么关系?

时间:2024-03-03 12:13:13浏览次数:30  
标签:Java String void 接口 Teacher teacher public 中类 name

Java中类与类之间是什么关系?

1.依赖

依赖是指一个类(称为依赖类)使用到了另一个类(称为被依赖类),而这种使用关系是具有偶然性的、临时性的、非常弱的,但是被依赖类(目标类)的变化会影响到依赖类。

例如,比如人A要过河,需要借用一条船B,此时人A与船B之间的关系就是依赖。表现在代码层面,为类B作为参数被类A在某个方法中使用

Boat 类

点击查看代码
package com.itcq.dependency;

/**
 * Boat 类表示一艘带有名称的水上交通工具。
 */
public class Boat {
    private String name;
    /**
     * 用指定的名称构造 Boat 对象。
     *
     * @param name 船的名称。
     */
    public Boat(String name) {
        this.name = name;
    }
    /**
     * 获取船的名称。
     *
     * @return 船的名称。
     */
    public String getName() {
        return name;
    }
    /**
     * 设置船的名称。
     *
     * @param name 船的新名称。
     */
    public void setName(String name) {
        this.name = name;
    }
}

Person 类

点击查看代码
package com.itcq.dependency;
/**
 * Person 类表示能够使用船渡河的个体。
 */
public class Person {
    /**
     * 使用指定的船渡河。
     *
     * @param boat 用于渡河的船。
     */
    public void crossRiver(Boat boat){
        System.out.println("我乘坐"+boat.getName()+"过河···");
    }
}

App测试类

点击查看代码
package com.itcq.dependency;

/**
 * App 类包含 main 方法,用于演示 Person 和 Boat 类之间的依赖关系。
 */
public class App {

    public static void main(String[] args) {

        // 创建 Person 的实例
        Person person = new Person();

        // 通过将 Boat 对象作为参数演示依赖关系
        person.crossRiver(new Boat("传琦T-001"));
    }
}

依赖关系的强弱:

依赖关系的强度取决于以下几个因素:

  • 依赖的程度:如果一个类对另一个类的依赖程度高,则依赖关系更强。
  • 耦合的程度:如果两个类之间的耦合度高,则依赖关系更强。
  • 生命周期:如果两个类具有相同的生命周期,则依赖关系更强。

总结:

  • 依赖关系是一种比较常见的类与类之间的关系。
  • 依赖关系的强度取决于几个因素,包括依赖程度、耦合程度和生命周期。

其他示例:

  • Person 类依赖于 Address 类,因为人需要住址。
  • Order 类依赖于 Product 类,因为订单包含商品。
  • FileReader 类依赖于 File 类,因为文件读取器需要读取文件。

依赖关系可以通过参数、成员变量、方法调用、配置文件等方式体现。选择哪种方式体现依赖关系,需要根据具体情况来决定。

2.关联

关联关系是指两个或多个类之间存在着一种相互依赖的关系,但这种依赖关系不是强依赖关系,而是弱依赖关系,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。关联可以是单向关联、双向关联。单向关联在代码层面表现为:类A当中使用了类B,其中B作为类A的成员变量。双向关联在代码层面表现为:类A当中使用了类B作为成员变量;同时类B中也使用了类A作为成员变量。

例如:

双向关联:一个Student类关联于Teacher类,因为Student类需要Teacher类来进行教学,而Teacher类也需要Student类来进行教学。

Student类

点击查看代码
package com.itcq.association;

public class Student {
    private String name;
    private Teacher teacher;
    public Student(String name) {
        this.name = name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public Teacher getTeacher() {
        return teacher;
    }
    // 学生需要老师进行教学
    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }
    // 学生的其他方法...
    public void attendClass() {
        System.out.println(name + "正在上课,老师是:" + teacher.getName());
    }
}

Teacher类

点击查看代码
package com.itcq.association;

public class Teacher {
    private String name;
    private Student student;
    public Teacher(String name) {
        this.name = name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public Student getStudent() {
        return student;
    }
    // 老师需要学生进行教学
    public void setStudent(Student student) {
        this.student = student;
    }
    // 老师的其他方法...
    public void conductClass() {
        System.out.println(name + "正在授课,学生是:" + student.getName());
    }
}

测试类App

点击查看代码
package com.itcq.association;
public class App {
    public static void main(String[] args) {
        // 创建学生和老师的实例
        Student student = new Student("小明");
        Teacher teacher = new Teacher("张老师");
        // 建立相互关联
        student.setTeacher(teacher);
        teacher.setStudent(student);
        // 学生上课
        student.attendClass();//小明正在上课,老师是:张老师
        // 老师授课
        teacher.conductClass();//张老师正在授课,学生是:小明
    }
}

单向关联:当一个类关联到另一个类,但另一个类不直接关联回来,就是单向关联。以下是一个示例,演示了Student类关联到Teacher类的单向关联:

Student类

点击查看代码
package com.itcq.association;
public class Student {
    private String name;
    private Teacher teacher;

    public  Student(){

    }

    public Student(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

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

    public Teacher getTeacher() {
        return teacher;
    }

    // 学生需要老师进行教学
    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }

    // 学生的其他方法...

    public void attendClass() {
        if (teacher != null) {
            System.out.println(name + "正在上课,老师是:" + teacher.getName());
        } else {
            System.out.println(name + "正在上课,但尚未分配老师。");
        }
    }
}

Teacher类

点击查看代码
package com.itcq.association;

public class Teacher {
    private String name;

    public Teacher(){

    }

    public Teacher(String name) {
        this.name = name;
    }

    public void setName(String name) {
        this.name = name;
    }
    // 老师的其他方法...

    public String getName() {
        return name;
    }
}

App测试类

点击查看代码
package com.itcq.association;

public class App {
    public static void main(String[] args) {
        // 创建学生和老师的实例
        Student student = new Student("小明");
        Teacher teacher = new Teacher("张老师");

        // 建立单向关联,学生关联到老师
        student.setTeacher(teacher);

        // 学生上课
        student.attendClass();//小明正在上课,老师是:张老师
    }
}

3.继承(泛化Generalization)

继承指的是一个类(称为子类(派生类)、子接口)继承另外的一个类(称为父类(基类)、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字extends明确标识

下面是一个使用继承关系的示例,其中有一个父类 Animal,以及两个子类 CatDogCat 类继承自 Animal,而 Dog 类也继承自 Animal。每个类都有自己的方法 eat 来描述它们的饮食习惯。

Animal类

点击查看代码
package com.itcq.generalization;

// Animal 类作为父类
public class Animal {
    private String name;

    public Animal(){

    }

    public Animal(String name) {
        this.name = name;
    }

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

    public String getName() {
        return name;
    }

    // eat 方法在父类中被定义,具体的实现在子类中完成
    public void eat() {
        System.out.println(name + "正在进食");
    }
}

Cat类

点击查看代码
package com.itcq.generalization;

// Cat 类继承自 Animal 类
public class Cat extends Animal {
    public Cat(){
        super();
    }

    public Cat(String name) {
        super(name);
    }

    // 重写父类的 eat 方法
    @Override
    public void eat() {
        System.out.println(getName() + "正在吃鱼");
    }
}

Dog类

点击查看代码
package com.itcq.generalization;
// Dog 类继承自 Animal 类
public class Dog extends Animal {
    public Dog(){
        super();
    }
    public Dog(String name) {
        super(name);
    }

    // 重写父类的 eat 方法
    @Override
    public void eat() {
        System.out.println(getName() + "正在吃肉");
    }
}

App测试类

点击查看代码
package com.itcq.generalization;

public class App {
    public static void main(String[] args) {
        // 创建 Cat 和 Dog 实例
        Cat cat = new Cat("小猫");
        Dog dog = new Dog("小狗");

        // 调用各自的 eat 方法
        cat.eat(); // 输出:小猫正在吃鱼
        dog.eat(); // 输出:小狗正在吃肉
    }
}

标签:Java,String,void,接口,Teacher,teacher,public,中类,name
From: https://www.cnblogs.com/itcq1024/p/18049781

相关文章

  • Java方法
    何为方法Java方法是语句的集合,它们在一起执行一个功能,方法包含于类或对象中,方法在程序中被创建,在其他地方被引用设计方法的原则:保持方法的原子性-一个方法只完成1个功能,这样利于后期的拓展publicclassDemo01{publicstaticvoidmain(String[]args){ints......
  • 「java.util.concurrent并发包」之 Unsafe
    一unsafe介绍Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C......
  • 是学习c++还是java?
    上高中时,自己第一次接触到学校的中华学习机和苹果机,当时中华学习机上可以进行basic编程,那时候自己其实就爱上编程,但是没有人指点,也学习不得法,所以就没有进行下去!大学时,自己的主攻专业并不是计算机,但是学习了《计算机基础》和《c程序设计》,前者主要学习dos命令和wps文字处理,后者主......
  • 淘宝电商api接口 获取商品详情 搜索商品
    iDataRiver平台https://www.idatariver.com/zh-cn/提供开箱即用的taobao淘宝电商数据采集API,供用户按需调用。接口使用详情请参考淘宝接口文档接口列表1.获取商品详情参数类型是否必填默认值示例值描述apikeystring是idr_***从控制台里复制apikeyitem......
  • Java方法
    JAVA方法一、什么是方法?System.out.println(),他们是什么?System.out.println();/*System是一个类out是System下的一个输出对象println()就是一个方法*/Java方法是语句的集合,它们在一起执行一个功能,方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在......
  • Java引用类型解析:掌握强引用、软引用、弱引用和幻象引用的妙用
     概述:Java中的引用分为强引用、软引用、弱引用和幻象引用。强引用是最常见的,不会被垃圾回收;软引用在内存不足时才被回收;弱引用在下一次垃圾回收时回收;幻象引用用于检测对象是否已被回收。它们各自适用于不同场景,帮助开发者更灵活地管理对象生命周期,避免内存泄漏。在Java中,引......
  • JavaWeb_mac_env
    maven安装brew安装wgetbrewinstallwgetbrewcleanup--prune=all //删除所有安装缓存下载mavenwgethttps://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache-maven-3.9.6-bin.tar.gz或者curl-Ohttps://dlcdn.apache.org/maven/maven-3/3.9.6/binaries/apache......
  • java Flappy Bird小游戏二次开发
    引言FlappyBird是一款广为人知的经典小游戏,以其简单的操作方式和高难度挑战吸引了全球数百万玩家。游戏的核心机制非常直接——玩家通过点击屏幕使小鸟飞翔,避免碰撞到上下移动的管道,同时尽可能地飞行得更远。这种看似简单的游戏设计隐藏了深层的挑战性和上瘾性,让人不禁一试再试......
  • Java学习笔记——第三天
    流程控制程序中最经典的三种执行顺序顺序结构:自上而下地执行代码,最普通的执行顺序。分支结构:根据条件,选择对应代码执行。循环结构:控制某段代码重复执行。分支结构if分支if分支的作用根据条件(真或假)来决定执不执行某段代码或执行哪段代码。if分支应用场景需要根据不同......
  • 为什么要使用Java SPI机制
    JavaSPI(ServiceProviderInterface)最早是在JavaSE6中被引入的,作为一种标准的、用于在运行时发现和加载服务提供者插件的标准机制。以前的程序猿实现JDBC连接数据库都会自己写工具类加载不同厂商的驱动来实现数据库操作,但是随着JDBC4.0之后采用了JavaSPI机制,这部分工作就变的......