java中类与类的关系_Java中类与类的关系

在java中类和类的关系大致分三种:泛化、关联、依赖。

1. 泛化(Generalization)

"XX是一个XX"关系(is a),通常使用的关键词为 extends、implements

继承:继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

继承的特点:

1.继承关系是传递的。若类C继承类B,类B继承类A(多层继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。

2.继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。

3.继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。

4.继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。

5.提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑仅支持单重继承,而通过使用接口机制来实现多重继承。

注意:如果父类是接口那么其中所有的方法必须由子类重写。如果父类是抽象类那么父类中的未实现方法必须有子类重写,

一般父类

//父类

public class Car {

public void drive() {

System.out.println("车可以开");

}

}

//子类

public class Bus extends Car {

public void buyTickets(){

System.out.println("公交车要买票");

}

}

公交车拓展了车的功能增加了一个买票的功能

抽象父类

public abstract class Animal {

public void eat() {

System.out.println("动物可以吃东西");

}

public abstract void move();

}

public class Dog extends Animal {

@Override

public void move() {

System.out.println("狗在地上跑");

}

}

有部分未实现的方法必须在子类中实现。

接口父类

public interface Phone {

void call();

void sendMsg();

}

public class SmartPhone implements Phone {

@Override

public void call() {

System.out.println("手机可以打电话");

}

@Override

public void sendMsg() {

System.out.println("手机可以发短信");

}

}

所有方法都在子类实现

2.关联(Association)

"XX是XX的一部分"关系(has a)通常使用的关键字 new

当一个对象中,加入了另外一个对象时就形成关联关系。

关于分为有两种特殊的形式,聚合(Aggregation)和组合(Composition),聚合和组合只有概念上的区别,在Java中的代码实现上没有区别。

在代码中具体表现为成员变量。

1.组合

组合:表示类之间的整体和部分的关系,所有组合在一起的对象作为一个整体存在,当整体不存在了那么部分对象也就不存在了

组合就像是人体,一旦人死亡每个器官就都死亡了。

2.聚合

聚合:表示整体和部分的关系,所有聚合在一起的对象作为一个整体存在,但个体的生命周期并不依赖整体的生命周期。

聚合就像人群,即使一个个体走散了个体也能生存。

下面我们就举个例子来说明两者关系:

有如下场景,汽车要开动之前需要先清洁汽车,检修完成后使用发动机点火启动。

/**

* 汽车清理工具

*/

public class CleaningTools {

private static final CleaningTools cleaningTools = new CleaningTools();

private CleaningTools() {}

public static CleaningTools getCleaningTools() {

return cleaningTools;

}

public void clean() {

System.out.println("清洁汽车");

}

}

/**

* 汽车发动机

*/

public class Motor {

public void startUp() {

System.out.println("发动汽车");

}

}

public class Car {

private CleaningTools cleaningTools = CleaningTools.getCleaningTools();

private Motor motor = new Motor();

public void dirver() {

cleaningTools.clean();

motor.startUp();

}

public static void main(String[] args) {

Car car = new Car();

car.dirver();

}

}

在这个例子中汽车发动机和汽车就是组合关系。当汽车报废后发动机也会报废。(强关联)

汽车和汽车清理工具的关系是,即便汽车报废清理工具也能清理其他汽车。(弱关联)

3. 依赖(Dependency)

"XX用了一个XX"关系(use a)关键字 import

代码中的表现为局部变量,方法的参数,以及对静态方法的调用

1.依赖

依赖: 指两个相对独立的类,一个类负责构造另外一个类时两个类就形成了依赖关系。

依赖关系是最普遍的关系

public class StringUtil {

public static boolean isNotEmpty(String str) {

return str != null && "".equals(str.trim());

}

}

public class Customer {

public static void main(String[] args) {

StringUtil.isNotEmpty("111");

}

}

我们调用了StringUtil中的isNotEmpty方法,那么我们就可以说Customer类依赖了StringUtil类

4.总结

应该尽量优先使用关联,而不是泛化,因为泛化会使得类关系过于复杂化,破坏了封装性,使用组合一样可以获得已有类的功能,而且会使新类更加稳固。

实际上,从依赖 ⇒ 关联 ⇒ 泛化,类与类之间的关系更加紧密,互相之间的影响越来越大。

1.泛化

优点

子类能自动继承父类的接口

创建子类的对象时,无须创建父类的对象

缺点

破坏封装,子类与父类之间紧密耦合,子类依赖于父类的实现,子类缺乏独立性

支持扩展,但是往往以增加系统结构的复杂度为代价

不支持动态继承。在运行时,子类无法选择不同的父类

子类不能改变父类的接口

2.关联

优点

不破坏封装,整体类与局部类之间松耦合,彼此相对独立

具有较好的可扩展性

支持动态组合。在运行时,整体对象可以选择不同类型的局部对象

整体类可以对局部类进行包装,封装局部类的接口,提供新的接口

缺点

整体类不能自动获得和局部类同样的接口

创建整体类的对象时,需要创建所有局部类的对象

3.使用泛化还是关联。

新类是否需要向上造型。也就是说当我们想重用原类型作为新类型的内部实现的话,我们最好自己关联,如果我们不仅想重用内部实现而且还想重用接口的话,那就用泛化。

4.依赖

依赖是一种极为松散的类组织结构。

引用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

徐坤用话剧震了我们一道

年前,徐坤为人艺小剧场写了个话剧《性情男女》,请几个朋友去看,要求是必须携夫人或者女朋友前往。我开始没明白她的用意,就带女朋友去了。剧场门口,徐坤穿着小红羽绒袄诡秘地迎接我们。 当我走进小剧场时,一…

《命犯桃花》离斯蒂芬·金还很遥远

期待已久的丁天的新书《命犯桃花》(北方文艺出版社2006年2月)终于出版了。在这之前他的2000年的旧作《脸》也刚刚修订再版。《脸》作为国内恐怖小说的开先河之作,在当时产生了很大的影响,甚至可以说影响了现在的一批恐怖小说作家。…

java spring redis_spring配置redis(xml+java方式)

条件:引用好架包org.springframework.dataspring-data-redis2.1.3.RELEASEredis.clientsjedis2.9.0一、使用xml进行配置1、创建xml文件2、使用:ApplicationContext applicationContext new ClassPathXmlApplicationContext("application.xml"…

我们需要什么样的恐怖小说?

斯蒂芬金漫画像 ——由台湾的两部有影响的恐怖小说谈起 台湾的恐怖悬疑类小说的发展比大陆早若干年,原本以为他们会写的好一些,可看了两本部曾被台湾书界追捧的恐怖小说,感觉非常失望。一本是《网络凶邻》(作家出版社2006年2月出版…

男人是消耗品,女人是战利品?

读日本作家村上龙的随笔《所有的男人都是消耗品》(上海译文出版社2006年2月出版),感觉颇有意趣。村上龙与另个村上(春树)几乎同龄,是日本战后经济高速发展时期成名的作家,在文坛并称“W村上”。两人虽是好友…

看“意大利文艺复兴艺术展”(1)

带女儿去中华世纪坛,看了“意大利文艺复兴艺术展”,展览管理非常严格,不许带包,不许拍照,进场时要经过类似机场的检查。不过,我偷拍了几张照片。。。。。帕拉德与人头马   波提切利 画

java 什么是servlet_JavaWeb解释一下什么是 servlet?

Servlet是一种独立于平台和协议的服务端的java技术,可以生成动态WEB页面与传统的CGI(计算机图形接口)和其他类似的CGI技术相比。Servlet具有更好的可移植性。更强大的功能,更少的投资,更高的效率,更好的安全性。servlet是使用java…

看“意大利文艺复兴艺术展”(3)

手提哥利亚头的大卫 卡拉瓦乔 画看着那些过去只能在画册上见到的名画,看着画面上岁月留下的细细的裂纹,感觉这些大师就像小时候常说的——“远在天边,近在眼前”。看来画一定要近距离的观赏才是,尤其是大师的作品。那些大面积…

《书店》:一本平凡的小书

《书店》是一本平凡的小书,它出自英国女作家佩内洛普菲兹杰拉德之手。她60岁才开始写作,一生写了9本书,却有3本入围英国布克奖,终有一本获奖。评论界对她的评价是:“看不出惊世骇俗的野心,写人写事闲闲道来…

你的眼睛已经睁开了!(转)

《映像PHOTO》杂志——卷首语   那日松/文 贴者按:这张旧照片和弟弟的文章勾起了我许多往事的回忆,30年弹指一挥间,没想到我们也到回忆的年龄。记忆真是个奇怪的东西,年轻时你在拼命寻找它,就像寻找爱情和人生&#…

java知识点_java知识点

hashtable和hashmap:hashtable的key和value不允许为null,hashmap的key和value可以为nullhashtable的方法是Synchronized,hashmap没有,是非线程安全的,线程不安全的hashmap采用的是快速失败机制(线程不安全的集合对象在…

看以色列话剧《安魂曲》(图)

昨晚在人艺看了以色列的话剧《安魂曲》。把错!!先贴几张图共赏,由于灯光太暗,照的效果一般,众看官凑合看吧。剧的主题是死亡、死亡,还是死亡。上图:老伴得了重病就要被天使召唤而去,…

可以用推理来过度分析《无穷动》

表面看来&#xff0c;《无穷动》似乎是一部让男人缺席的电影&#xff0c;剧中没有一个男人角色&#xff0c;只有四个女人。但是男人的影响在剧中又无时无处不在。 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />首先&#xff0…

mysql int 最大显示宽度_mysql int 整数类型 解释显示宽度 和 存储宽度

存储宽度 是实际存储记录宽度存储宽度默认是写死的&#xff0c;就算修改宽度也改变不了&#xff0c;改变的是显示宽度有符号和无符号int创建一个 无符号的 int 整数类型mysql> create table t3(id int(1) unsigned);Query OK,0 rows affected (0.01sec)mysql> desct3;---…

女人口口相传的快乐和语气

《女人口口相传的秘密》&#xff08;中国华侨出版社2006年2月出版&#xff09;是一本女人写给女人的书&#xff0c;一本女人追求快乐主义的书。何谓“快乐主义”&#xff0c;就是将快乐上升至主义&#xff0c;然后抽象&#xff0c;最后将快乐变得虚无。 其实快乐本来是很简单的…

收到几本书,顺便热热身

最近收到几本书&#xff0c;都是与恐怖悬念有关的小说。其中一本是美国作家斯蒂芬金的《移动电话》&#xff08;CELL&#xff09;&#xff0c;是我弟从美国带回来的&#xff0c;英文精装本&#xff0c;握在手里很厚重。这是他的最新作品&#xff0c;正在《纽约时报》的虚构类图…

恐怖与暴力美学 + 妖魔化:《人皮客栈》观看笔记

《人皮客栈》&#xff08;&#xff28;&#xff2f;&#xff33;&#xff34;&#xff25;&#xff2c;&#xff09;是最近非常受碟友推崇的恐怖电影。片首字幕更有向昆丁塔伦蒂诺致敬的字样&#xff0c;证明它是个血腥暴力惊悚的限制级电影。自从《惊声尖叫》《去年夏天你干了…

成吉思汗:“世界之鞭”还是“人类之王”?

关于成吉思汗的书籍可谓汗牛充栋&#xff0c;而以今天的眼光考察这位伟人的却凤毛麟角。今年是蒙古统一800周年&#xff08;1206—2006&#xff09;&#xff0c;世界范围内据说要展开一系列的纪念活动&#xff0c;所以有关成吉思汗的出版物会更多。成吉思汗的传记我首推法国历史…

java电话正则表达式_java 正则表达式的应用:读取文件,获取其中的电话号码

1、正则表达式正则表达式&#xff0c;又称正规表示法、常规表示法(英语&#xff1a;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE)&#xff0c;计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编…

谁都可能是凶手:《八面埋伏》观看手记

《八面埋伏》&#xff08;MINDHUNTERS&#xff09;又叫《死亡特训》是我最近看的比较好的一部悬疑惊险片&#xff0c;研究分析一下影片的故事及悬念设置&#xff0c;对我们的悬疑电影和小说写作应该有借鉴价值。 一个美国特种部队小组来到一座封闭的小岛进行代号为“MINDHUNTER…