Java中类之间的关系

主要介绍java中的关联关系聚合关系合成关系以及依赖关系
顺便介绍 is-a, is-like-a, has-a

类之间的关系

泛化关系

类和类之间的继承关系以及接口与接口之间的继承关系

泛化关系·继承:类的继承,接口的继承

实现关系

类对接口的实现

实现关系·类实现接口

关联关系

类与类之间的连接,一个类可以知道另一个类的属性和方法,在java语言中使用成员变量体现

Me me = new Me(new Friend()) //建立关联关系

  • 例如我和朋友的关系

    • 我可以找到我朋友的地址
    public class Friend{
        public String addr;
    }
    class Me{
        Friend f;
        public Me(Friend f){
            this.f = f;
        }
        // test
        public static void main(String[] args){
            Friend f = new Friend();
            Me me = new Me(f);
            System.out.println(me.f.addr)//获取朋友的地址
        }
    }
    

关联关系·通过“我”可以找到朋友

聚合关系

聚合关系是关联关系的一种,是较强的关联关系,是整体和部分的关系。例如:汽车和轮胎

和关联关系不同,关联关系的类处于同等的层次上,而聚合关系的类处于不同等的层次上,一个代表整体,一个代表部分

聚合关系是整体和部分的关系

​ 整体不依赖部分

​ 部分也不依赖整体

整体无法决定部分的声明周期(人和四肢的关系就不属于聚合关系)

  • 例如教室和学生的关系

    public class Student{
        
    }
    public class ClassRoom{
        List<Student> s;
    }
    

聚合关系·整体和部分的关系:部分的声明周期和整体无关

合成关系

合成关系也是关联关系的一种,比聚合关系更强一些

合成关系和聚合关系是相似的,区别在于:

​ 合成关系的整体和部分是紧密联系的,整体的生命周期决定部分的生命周期

  • 例如人和四肢的关系

    public class human{
        List<四肢> s;
    }
    

合成关系·比聚合关系要强,部分的生命周期由整体决定

依赖关系

依赖关系比较弱,是一种比关联关系弱的一种关系

java语言中体现在:返回值、参数、局部变量和静态方法的调用

  • 例如

    public class Test{
        public void m1(){
            User user = new User();//依赖关系
        }
    }
    class user{
    }
    

比关联关弱·仅仅是调用关系

is-a/is-like-a/has-a

is-a

  • Dog is a Animal

  • is-a 是继承关系

    public class Animal{
        
    }
    class Dog extends Animal{
        
    }
    

is-like-a

  • A is like a I

  • is-like-a 是实现关系

    public Interface I{
        void m1();
    }
    class A implements I {
        public void m1(){
            
        }
    }
    

has-a

  • A has a B

  • has-a 是包含关系

    public class B{
        
    }
    class A{// A has a B
        private B b;
    }
    
发布了34 篇原创文章 · 获赞 30 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/wql2014302721/article/details/104658884