初探设计:Java继承何时用?怎么用?

简介:

一、回顾继承

常见的如下:

1、依赖(”uses-a“)

2、聚合(”has-a“)

3、继承(”is-a“)类之间关系

也就是UML类图中常见的三种关系,另外常见的还有实现(接口与实现类的关系),组合等。

 

继承,即“is-a”关系,是一种表示特殊与一般的关系。比如,女人(特殊)是一个人(一般)。关键字extends表明正在构造的新类派生于一个存在的类。

1、已经存在的类称为 超类父类或者基类

2、新类被称为 子类或者派生类

 

有时候看着人家源码的设计。比如常见的接口,紧接着抽象类实现接口,然后继承该抽象类的各种实现:

image

一般都是这样的,行为总则都写着顶层接口抽象类实现了下面各个实现类公用的方法和字段实现类各自实现功能

但里面这些究竟怎么用呢?比如继承在什么前提下使用,什么场景前提下,下面就是思考后的小结:(Think , Write & Do)

 

二、继承何时用?怎么用

也就是说,继承设计使用的时候,有哪些技巧,有哪些需要注意的地方。

1、公共的方法和字段才放在基类(也就是父类)

这句话可能有争议,太过于吹毛求兹或者是严格。拿女人和人的问题来说,比如名字字段、age都可以放在基类人上面,但女人的那些第二特征就是独有了。

但有些时候的例子总是很疑惑:比如Java工程师实习生和Java工程师,看样子可以“实习生”extends “Java工程师”,然后很多Java工程师上的字段都是不属于Java实习生的。顾两者并没有上面太大关系,可能都是从属于一个父类—工程师。下面类关系图才是正确的:

image

子类对父类的继承是包括了父类的公有和受保护的方法和字段。但子类只需要继承父类的一部分,就没辙了。这时候记住一句话:“多用组合,少用继承”。

 

2、protect并不能保护父类

其实protect机制在父类并不能起到好的保护。子类可以在需要的的时候访问父类。但是继承无限制,即子类的子类… 无止境的。如果想侵入父类protect方法,只需要写个类,继承任意子类就可访问。二者,同一个包下能访问。

 

从上面也可以总结出:

3、在继承父类的方法与字段都有意义的时候,选择继承。否则,不要使用继承。

 

4、在覆盖父类中的行为(方法)时,不要偏离最初的设计内涵。

父类的方法实现或者定义都是指定了一种行为的内涵。所以继承父类的时候,有个重写override)方法可以改变子类的行为。但请不要改变其定义的内涵。源码中常见的有:比如 IO 中的 read write方法和Servlet中 的 get post。

 

5、继承与组合、多态

继承,子类与父类在编译期就能确定其对象。而组合或者是多态,在运行期就才能确定其对象,相比之下,组合多态达到了更多的灵活性。但,运行期未知的错误是要注意处理的。

顾,“多用组合,少用继承”。

 

三、本文小结

继承的一点一滴。泥瓦匠,这软文小结,难免有错误。欢迎指正讨论。

相关文章
|
5月前
|
Java 程序员
Java中的继承和多态:理解面向对象编程的核心概念
【8月更文挑战第22天】在Java的世界中,继承和多态不仅仅是编程技巧,它们是构建可维护、可扩展软件架构的基石。通过本文,我们将深入探讨这两个概念,并揭示它们如何共同作用于面向对象编程(OOP)的实践之中。你将了解继承如何简化代码重用,以及多态如何为程序提供灵活性和扩展性。让我们启程,探索Java语言中这些强大特性的秘密。
|
2月前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
132 1
|
3月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
45 3
|
3月前
|
Java
在Java多线程编程中,实现Runnable接口通常优于继承Thread类
【10月更文挑战第20天】在Java多线程编程中,实现Runnable接口通常优于继承Thread类。原因包括:1) Java只支持单继承,实现接口不受此限制;2) Runnable接口便于代码复用和线程池管理;3) 分离任务与线程,提高灵活性。因此,实现Runnable接口是更佳选择。
71 2
|
3月前
|
Java
Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口
【10月更文挑战第20天】《JAVA多线程深度解析:线程的创建之路》介绍了Java中多线程编程的基本概念和创建线程的两种主要方式:继承Thread类和实现Runnable接口。文章详细讲解了每种方式的实现方法、优缺点及适用场景,帮助读者更好地理解和掌握多线程编程技术,为复杂任务的高效处理奠定基础。
45 2
|
3月前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
53 1
|
4月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
3月前
|
Java 测试技术 编译器
Java零基础-继承详解!
【10月更文挑战第4天】Java零基础教学篇,手把手实践教学!
52 2
|
3月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
38 5
|
3月前
|
Java
java继承和多态详解
java继承和多态详解
56 5