全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

浅析Java中的继承与组合

前言

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中的继承(必看)  # 创建一个  # 把它  # 是一个  # 在这个  # 就可以  # 子类  # 会报  # 面向对象  # 这样的话  # 类中  # 复用  # 的是  # 我就  # 在这里  # 放在  # 出了  # 过了  # 又是  # 就能  # 也就 


相关文章: 黑客如何通过漏洞一步步攻陷网站服务器?  网页设计网站制作软件,microsoft office哪个可以创建网页?  高防服务器租用指南:配置选择与快速部署攻略  建站之星下载版如何获取与安装?  如何快速登录WAP自助建站平台?  如何解决VPS建站LNMP环境配置常见问题?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  魔毅自助建站系统:模板定制与SEO优化一键生成指南  如何在IIS7中新建站点?详细步骤解析  建站与域名管理如何高效结合?  大连 网站制作,大连天途有线官网?  如何用景安虚拟主机手机版绑定域名建站?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  大连网站制作公司哪家好一点,大连买房网站哪个好?  小建面朝正北,A点实际方位是否存在偏差?  建站之星安装后如何自定义网站颜色与字体?  如何高效完成独享虚拟主机建站?  攀枝花网站建设,攀枝花营业执照网上怎么年审?  青岛网站建设如何选择本地服务器?  建站之星北京办公室:智能建站系统与小程序生成方案解析  香港服务器网站推广:SEO优化与外贸独立站搭建策略  西安大型网站制作公司,西安招聘网站最好的是哪个?  淘宝制作网站有哪些,淘宝网官网主页?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  如何通过IIS搭建网站并配置访问权限?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何快速搭建安全的FTP站点?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  如何在腾讯云免费申请建站?  如何快速上传建站程序避免常见错误?  如何在腾讯云服务器上快速搭建个人网站?  如何用PHP快速搭建CMS系统?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  如何正确下载安装西数主机建站助手?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  如何选择高效稳定的ISP建站解决方案?  官网网站制作腾讯审核要多久,联想路由器newifi官网  建站之星代理平台如何选择最佳方案?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  如何选择服务器才能高效搭建专属网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。