Java学习(六)类和类之间的关系

类和类之间的关系:

A is-a B 泛化(继承 实现)
A has-a B 包含(组合 聚合 关联)
A use-a B 依赖(依赖)(need-a)

泛化

  • 子类继承父类,通过一个关键字:extends

  • 子类的对象可以调用父类中(public/protected)的属性和方法 当做自己的来使用。

  • 子类可以添加自己独有的属性和方法

  • 构造方法严格意义上来说不算是子类继承过来的,只是单纯的在子类调用构造方法时默认调用父类的构造方法,父类构造方法之前自动执行父类的程序块

  • 如果子类从父类中继承过来的方法无法满足子类的需要,可以在子类中重写(覆盖)父类的方法–>方法重写override

  • 每一个类都有继承类,如果不写extends,则默认继承Object

  • Java中继承是单个存在的(单继承),每一个类只能有一个继承类(在extends后面只能写一个类)

  • this和super的使用

    • this和super都是指代词,代替的是对象

    • this代替的是当前执行方法时的那个对象,不一定是当前类的

    • super代替的是当前执行时对象的父类对象

    • 都能调用一般属性和方法

    • 可以放置在成员的任意位置(属性,方法,构造,块)

    • 可以调用构造方法(只能放在构造方法的第一行)

    • this和super在构造方法中调用另一个类的构造方法不能同时出现在第一行

例:

父类:

public class Animal{
   
}

子类:

//通过extends来继承父类
public class Person extends Animal{
   
}

包含

  • 包含关系(组合,聚合,关联)

  • 从亲密程度上来讲不太一样

    • 整体和部分的关系,可以分割,后来形成在一起

    • 整体和部分的关系,创建时有可能是分开的

    • 整体和部分的关系,不可分割,要出现都出现,要消亡都消亡

    • 组合–>人和大脑 人和心脏的关系

    • 聚合–>汽车和车轮子 电脑和主板

    • 关联–>人有汽车 人有电脑

  • 从Java程序来描述这样的关系,通过一个类的对象当做另一个类的属性来存储

例:

父类:

public class Car{
   public String brand;//汽车品牌
   public String color;//汽车颜色
   public Wheel wheel;//车里面有一个轮子(包含关系)
   //方法
   public void showCar(){
       System.out.println("车的品牌是" brand ",车的颜色是" color "车里面有" wheel.brand "品牌" wheel.color "色的轮子");
       wheel.turn();
   }
   //构造方法
   public Car(){};
   public Car(String brand,String color,Wheel wheel){
       this.brand = brand;
       this.color = color;
       this.wheel = wheel;
   }
}

子类:

public class Wheel{
   public String brand;//车轮的品牌
   public String color;//车轮的颜色
   //方法
   public void turn(){
       System.out.println("车轮在转");
   }
   //构造方法
   public Wheel(){};
   public Wheel(String brand,String color){
       this.brand = brand;
       this.color = color;
   }
}

主方法:

public class Test {
   public static void main(String[] args){
       Car car= new Car("玛莎拉蒂","黄",new Wheel("米其林","蓝"));
       car.showCar();
   }
}

依赖

  • 不是整体和部分的关系,是因为某一件事产生了关系,临时组合在了一起,这件事做完了,关系即解散。如(屠夫杀猪、屠夫与猪的关系)

Java程序体现的形式为:

一个类的方法中使用到了另一个类的对象

  • 可以在方法中传递参数

  • 可以在方法中自己创建

例:

父类:

public class Butcher {
   //屠夫的类
   //杀猪方法
   public void killPig(String name){
       Pig pig=new Pig(name);
       pig.beKilled();
   }
}

子类:

public class Pig {
   public String name;//猪的名字
   public int weight=100;//猪的体重
   //方法
   public void beKilled(){
       System.out.println(name "被杀了");
   }
   //构造方法
   public Pig(){};
   public Pig(String name){
       this.name = name;
   }
}

主方法:

public class Test {
   public static void main(String[] args){
       //新建一个屠夫
       Butcher butcher = new Butcher();
       //执行杀猪方法
       butcher.killPig("佩奇");
   }
}
夜河资源网提供的所有内容仅供学习与交流。通过使用本站内容随之而来的风险以及法律责任与本站无关,所承担的法律责任由使用者承担。
一、如果您发现本站侵害了相关版权,请附上本站侵权链接和您的版权证明一并发送至邮箱:yehes#qq.com(#替换为@)我们将会在五天内处理并断开该文章下载地址。
二、本站所有资源来自互联网整理收集,全部内容采用撰写共用版权协议,要求署名、非商业用途和相同方式共享,如转载请也遵循撰写共用协议。
三、根据署名-非商业性使用-相同方式共享 (by-nc-sa) 许可协议规定,只要他人在以原作品为基础创作的新作品上适用同一类型的许可协议,并且在新作品发布的显著位置,注明原作者的姓名、来源及其采用的知识共享协议,与该作品在本网站的原发地址建立链接,他人就可基于非商业目的对原作品重新编排、修改、节选或者本人的作品为基础进行创作和发布。
四、基于原作品创作的所有新作品都要适用同一类型的许可协议,因此适用该项协议, 对任何以他人原作为基础创作的作品自然同样都不得商业性用途。
五、根据二〇〇二年一月一日《计算机软件保护条例》规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可不经软件著作权人许可,无需向其支付报酬!
六、鉴此,也望大家按此说明转载和分享资源!本站提供的所有信息、教程、软件版权归原公司所有,仅供日常使用,不得用于任何商业用途,下载试用后请24小时内删除,因下载本站资源造成的损失,全部由使用者本人承担!