浅析Java中的继承与组合

发布时间 - 2026-01-10 22:12:41    点击率:

前言

Java是一个面向对象的语言。每一个学习过Java的人都知道,封装、继承、多态是面向对象的三个特征。每个人在刚刚学习继承的时候都会或多或少的有这样一个印象:继承可以帮助我实现类的复用。所以,很多开发人员在需要复用一些代码的时候会很自然的使用类的继承的方式,因为书上就是这么写的(老师就是这么教的)。但是,其实这样做是不对的。长期大量的使用继承会给代码带来很高的维护成本。

其实我第一次学习java 的时候根本没有听说过组合这个名词,老师也更没有讲解过,我一直以为是我自己落掉了什么知识点,其实不是的,组合这个名词暂且把它定义为一个思维性的东西吧,相信读者都接触过了,但是并不知道它还有这个名字。

其实所谓的组合就是创建一个新类去调用已经创建并且调试好的类,那么这个新类就可以把它叫做是一个组合

例如我创建一个People

public class People {
 private String name;
 private int age;
 
 public void setName(String name){
 this.name = name;
 }
 public String getName(){
 return this.name;
 }
 public int getAge(){
 return this.age;
 }
 public void setAge(int age){
 this.age = age;
 }
}

那我现在要用这个类,我可以给这个类添加一些新的特性,这时候我们就可以创建一个新的类,然后在这个类里创建People的对象。

比如我现在创建一个类叫做Student

class Student {
 People people = new People();
}

然后可以在这个类里添加一些属性,比如定义个身份为student,在这里我就不在论述了。

接下来看看继承,其实继承和组合本就有异曲同工之妙,先来看看是怎样继承的。

在java里有一个叫做extends的关键字,它可以帮助我们继承,被继承的类我们称作父类,也可以叫做基类,超类都行,而继承者我们称作子类或者派生类等等

这里我们定义一个类

public class Student extends People{
 //doSomething
}

这样一来的话,该类就继承了父类的全部成员方法和成员变量,但是注意,声明为private权限的字段或者方法是不会被继承下来的。

为了证明这一点我们在student类写一个方法

public String re(){
 return this.name;
}

这里编译器会报一个错"People.name is not visible",从这里就可以看出,被声明为private 的字段或者方法是不能被继承下来的,如果你想把它继承下来,可以把private改成protected,这样的话,我们就能顺利的继承下name字段。

这样我们把People里的字段全部初始化一下,只需在代码里加上这一段代码块就行了

{
 this.age = 10;
 this.name = "zhangsan";
}

接下来在主函数里声明出这个student

Student student = new Student();
System.out.println(student.getAge());

现在我们惊讶的发现这个写法是可行的,尽管我们没有在子类中声明任何的字段和方法,我们依然可以调用getAge();并且可以顺利的打印出10

这是因为我们没有在子类中重载任何方法,所以此时调用的是父类的getAge,也就可以轻松的访问到父类的private声明的字段了。

看完了这些相信大家对继承已经有了一个初步的认识,那么在继承机制中,各个类的构造方法又是怎么被调用的呢,答案是自父类到子类依次调用.

演示的同时我先声明三个类Temp1、Temp2、Temp3,与此同时Temp3继承自Temp2,而Temp2又继承自Temp1,这样的话,我们在各个类的构造方法里都放上一句打印的语句

//Temp1
System.out.println("i'm temp1");
//Temp2
System.out.println("i'm temp2");
//Temp3
System.out.println("i'm temp3");

为了方便我这里就这样写了,但是大家千万要注意这些是放在各个类的构造方法里的。

我们在主函数里创建一个Temp3的对象

public class Mian{
 public static void main(String[] args){
 Temp3 temp3 = new Temp3();
 }
}

我们看控制台,打印出了

i'm temp1
i'm temp2
i'm temp3

由此可以看出先要创建temp3的对象,发现了extends关键字,然后顺着继承链往上走,找到temp2,又发现extends关键字,接着找到temp1,然后调用temp1的构造方法,接着往下挨个调用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。


# java组合和继承  # java中组合和继承  # java  # 组合  # 继承  # Java内部类的继承(全)  # java教程之java继承示例详解  # Java中继承、多态、重载和重写介绍  # 解析Java继承中方法的覆盖和重载  # 浅谈Java 对于继承的初级理解  # 详解Java中的封装、继承、多态  # Java 继承方法实例详解  # Java基础教程之继承详解  # 老生常谈 Java中的继承(必看)  # 创建一个  # 把它  # 是一个  # 在这个  # 就可以  # 子类  # 会报  # 面向对象  # 这样的话  # 类中  # 复用  # 的是  # 我就  # 在这里  # 放在  # 出了  # 过了  # 又是  # 就能  # 也就 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何做网站制作流程,*游戏网站怎么搭建?  详解jQuery中基本的动画方法  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  千库网官网入口推荐 千库网设计创意平台入口  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  如何在Tomcat中配置并部署网站项目?  如何快速配置高效服务器建站软件?  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  jquery插件bootstrapValidator表单验证详解  如何用AI帮你把自己的生活经历写成一个有趣的故事?  Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比  教学论文网站制作软件有哪些,写论文用什么软件 ?  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  如何快速选择适合个人网站的云服务器配置?  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  大型企业网站制作流程,做网站需要注册公司吗?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  JavaScript如何操作视频_媒体API怎么控制播放  如何在万网自助建站中设置域名及备案?  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  iOS中将个别页面强制横屏其他页面竖屏  Laravel怎么判断请求类型_Laravel Request isMethod用法  网站建设整体流程解析,建站其实很容易!  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  如何获取上海专业网站定制建站电话?  如何挑选高效建站主机与优质域名?  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Swift中循环语句中的转移语句 break 和 continue  用yum安装MySQLdb模块的步骤方法  如何批量查询域名的建站时间记录?  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  JS碰撞运动实现方法详解  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  中国移动官方网站首页入口 中国移动官网网页登录  详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  微信推文制作网站有哪些,怎么做微信推文,急?  js实现获取鼠标当前的位置  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Windows Hello人脸识别突然无法使用  HTML5建模怎么导出为FBX格式_FBX格式兼容性及导出步骤【指南】  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Python数据仓库与ETL构建实战_Airflow调度流程详解