位置: IT常识 - 正文

[JAVA]继承(java继承的基本概念)

编辑:rootadmin

目录

1.继承的概念

2.继承的语法

3.父类成员访问 

3.1子类中访问父类成员变量

3.2子类中访问父类成员方法

4.super关键字 

5.子类构造方法

6.继承方式

7.final关键字和类的关系


推荐整理分享[JAVA]继承(java继承的基本概念),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:java继承和实现的区别,java继承,java继承关键字,java继承父类的构造方法,java继承和多态之子类继承性,java继承和多态之子类继承性,java继承的概念,java继承和多态之子类继承性,内容如对您有帮助,希望把文章链接给更多的朋友!

面向对象思想中提出了继承的概念,专门用来进行共性抽取,实现代码复用。就像是数学中,提取每一个数的公因数一般,把相同的代码提取出来,单独的成为一个类,但同时又可以被别的类使用其中的属性或方法。

1.继承的概念

继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加新功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用

 Cat和Dog类,既有从父类Animal继承的语句,也含有本身的语句。

class Animal{//父类 String name; int age; public void eat(){ System.out.println(this.name + " is eating."); }}class Cat extends Animal{ //Animal的子类 public void miaow(){ System.out.println("miaomiaomiao~"); }}class Dog extends Animal{ //Animal的子类 public void bark(){ System.out.println("wangwangwang~"); }}2.继承的语法

修饰符 class 子类 extends 父类{……}

class Animal{//父类 String name; int age; public void eat(){ System.out.println(this.name + " is eating."); }}class Cat extends Animal{//子类 public void miaow(){ System.out.println("miaomiaomiao~"); }}public class Test { public static void main(String[] args) { Cat cat = new Cat(); System.out.println(cat.age); System.out.println(cat.name); }}

我们可以看到,我们在main方法中,只实例化了cat对象,但是cat本身并没有定义任何成员变量,却发现可以调用成员变量age和name。而我们又使用了继承,由此可知对象cat当中的成员变量肯定来自于其父类Animal,同样的我们也可以同样的访问父类的方法。

通过上面的举例,我们值得注意的是:

子类本身要有属于自身的语句,如果和父类相同则没必要创建一个新的类。子类会将父类的成员变量和方法继承到子类当中3.父类成员访问 3.1子类中访问父类成员变量

我们可以在子类中使用方法来访问父类的成员,使用this会先在子类中寻找成员,如果找不到则会进入父类寻找,所以在子类中this也可以访问父类成员

class Animal{//父类 String name; int age; public void eat(){ System.out.println(this.name + " is eating."); }}class Cat extends Animal{ //Animal子类 public void setName(String name){ this.name = name; } public void miaow(){ System.out.println("miaomiaomiao~"); }}

还有另一种情况,就是子类中成员名和父类的相同。

class Animal{//父类 String name; //注意1 int age; public void eat(){ System.out.println(this.name + " is eating."); }}class Cat extends Animal{ //Animal子类 String name; //注意2 public void setName(String name){ this.name = name; } public void miaow(){ System.out.println("miaomiaomiao~"); }}

此处,子类和父类的成员名都相同,那下面的setName方法中访问的是子类的成员还是父类的成员呢??

答案是:子类的。就像是C语言中局部变量和全局变量一样,如果变量名相同,给其赋值局部变量会优先与全局变量(类似就近原则?)在这里也是同样的道理

“成员名相同,访问父类成员变量的方法我们下面会有所提及”

于是,我们总结以下几点:

如果访问的成员变量子类中有,优先访问自己的成员变量。如果访问的成员变量子类中无,则访问父类继承下来的,如果父类也没有定义,则编译报错。如果访问的成员变量与父类中成员变量同名,则优先访问自己的。 3.2子类中访问父类成员方法

如果成员方法名不相同的情况:

和访问父类成员变量类似的,先在子类中寻找要访问的成员方法,如果有即可以访问。如果子类没有,下一步是进入到父类寻找要访问的成员方法。父类中访问不到相应的成员方法,则编译器会报错。子类的优先级是大于父类的

[JAVA]继承(java继承的基本概念)

 成员方法名相同的情况:

class Base{ public void methodA(){ System.out.println("Base中的方法"); } public void methodB(){ System.out.println("Base中的方法"); }}class A extends Base{ public void methodA(int a){ System.out.println("A中的参数为int的methodA方法"); } public void methodB(){ System.out.println("A中的methodB方法"); }}public class Test { public static void main(String[] args) { A a = new A(); a.methodA();//没有参数,访问的是父类中的methodA方法 a.methodA(5);//有参数,访问的是子类中的methodA方法 a.methodB();//访问的是子类的方法,不可能访问到父类的方法 //因为先在子类中访问再到父类 }}

 

 总结:

通过子类对象访问父类与子类中不同名方法时,优先在子类中找,找到则访问,否则在父类中找,找到则访问,否则编译报错。通过派生类对象访问父类与子类同名方法时,如果父类和子类同名方法的参数列表不同(重载),根据调用方法适传递的参数选择合适的方法访问,如果没有则报错;4.super关键字 

Java提供了super关键字,该关键字主要作用:在子类方法中访问父类的成员。

class Base{ public void methodA(){ System.out.println("Base中的方法"); } public void methodB(){ System.out.println("Base中的方法"); }}class A extends Base{ public void methodA(int a){ System.out.println("A中的参数为int的methodA方法"); } public void methodB(){ System.out.println("A中的methodB方法"); super.methodB();//注意此处:用super关键字访问到了父类的成员方法 }}public class Test { public static void main(String[] args) { A a = new A(); a.methodA();//没有参数,访问的是父类中的methodA方法 a.methodA(5);//有参数,访问的是子类中的methodA方法 a.methodB();//访问的是子类的方法,不可能访问到父类的方法 //因为先在子类中访问再到父类 }}

 注意事项:

只能在非静态方法中使用在子类方法中,访问父类的成员变量和方法5.子类构造方法

 因为父类和子类是继承关系,即子类会继承父类的成员变量除此还有自身额外的成员变量,在构建子类的构造方法的时候要先调用父类的构造方法。

class Base{ public Base(){ System.out.println("调用了父类的构造方法"); }}class A extends Base{ public A(){ super();//调用父类的构造方法 用户没有写的时候会默认自动添加 System.out.println("调用了子类的构造方法"); }}public class Test { public static void main(String[] args) { A a = new A(); }}

 注意:

若父类显式定义无参或者默认的构造方法,在子类构造方法第一行默认有隐含的super()调用,即调用基类构造方法如果父类构造方法是带有参数的,此时需要用户为子类显式定义构造方法,并在子类构造方法中选择合适的父类构造方法调用,否则编译失败。在子类构造方法中,super(...)调用父类构造时,必须是子类构造函数中第一条语句。super(...)只能在子类构造方法中出现一次,并且不能和this同时出现6.继承方式

 java中的继承方式分为3种:

第一种:单继承

即一个类被另一个类继承

class A{ ……}class B extends A{ ……}

第二种:多层继承

即有一个类A,类B继承了A,类C继承了B

class A{ ……}class B extends A{ ……}class C extends B{ ……}

第三种:不同类继承同一个类

即有一个类A,类B继承A,类C继承A

class A{ ……}class B extends A{ ……}class C extends A{ ……}7.final关键字和类的关系

当final修饰一个类的时候,这个被修饰的类不能被继承

 编译器会报错

本文链接地址:https://www.jiuchutong.com/zhishi/299116.html 转载请保留说明!

上一篇:CSS选择器(css选择器权重)

下一篇:前端文件的上传与下载(前端文件的上传和下载)

  • 微信深度清理在哪里(微信深度清理会清理什么内容)

    微信深度清理在哪里(微信深度清理会清理什么内容)

  • 如何成为一个早起者(如何早日成为一名合格的党员心得体会)

    如何成为一个早起者(如何早日成为一名合格的党员心得体会)

  • 苹果11手机悬浮球在哪里设置关闭(苹果11手机悬浮球怎么设置)

    苹果11手机悬浮球在哪里设置关闭(苹果11手机悬浮球怎么设置)

  • 小米手机wlan助理怎么关闭(小米手机wlan助手怎么关闭)

    小米手机wlan助理怎么关闭(小米手机wlan助手怎么关闭)

  • 相机拍出来脸是歪的(相机拍出来脸是歪的怎么办)

    相机拍出来脸是歪的(相机拍出来脸是歪的怎么办)

  • 快手直播时候一会暗一会亮(为什么快手直播一半中断)

    快手直播时候一会暗一会亮(为什么快手直播一半中断)

  • 移动硬盘和u盘相比最大的优势是(移动硬盘和u盘的使用寿命)

    移动硬盘和u盘相比最大的优势是(移动硬盘和u盘的使用寿命)

  • word2016文档的默认扩展名是什么(word2016文档的默认拓展名)

    word2016文档的默认扩展名是什么(word2016文档的默认拓展名)

  • qq剪切快捷键ctrl加什么(qq剪贴板 快捷键)

    qq剪切快捷键ctrl加什么(qq剪贴板 快捷键)

  • 脉脉软件是干嘛的(脉脉软件是干嘛的怎么赚钱)

    脉脉软件是干嘛的(脉脉软件是干嘛的怎么赚钱)

  • iphone11耗电很厉害怎么回事(iphone11耗电严重)

    iphone11耗电很厉害怎么回事(iphone11耗电严重)

  • qq邮件被拒收会提示吗(qq邮箱拒收后对方有什么提示)

    qq邮件被拒收会提示吗(qq邮箱拒收后对方有什么提示)

  • 段落默认对齐方式(段落对齐方式默认设置为左对齐对吗)

    段落默认对齐方式(段落对齐方式默认设置为左对齐对吗)

  • 手机开流量了还是没有网怎么办(手机开流量了还是没有网怎么办?)

    手机开流量了还是没有网怎么办(手机开流量了还是没有网怎么办?)

  • 苹果手机能扩容内存吗(苹果手机能扩容内存多少钱)

    苹果手机能扩容内存吗(苹果手机能扩容内存多少钱)

  • 怎样把电影下载到u盘里面(怎样把电影下载到内存卡上)

    怎样把电影下载到u盘里面(怎样把电影下载到内存卡上)

  • 高德地图如何查看历史记录(高德地图如何查导航记录历史)

    高德地图如何查看历史记录(高德地图如何查导航记录历史)

  • 淘宝88会员怎么开通(淘宝88会员怎么关闭自动续费)

    淘宝88会员怎么开通(淘宝88会员怎么关闭自动续费)

  • pcs是什么(pcs是什么附加费)

    pcs是什么(pcs是什么附加费)

  • 小爱同学怎么打开电视(小爱同学怎么打开蓝牙)

    小爱同学怎么打开电视(小爱同学怎么打开蓝牙)

  • word试卷密封线怎么删除(word试卷密封线模板)

    word试卷密封线怎么删除(word试卷密封线模板)

  • 小米数据漫游开关在哪(小米数据漫游开启方法)

    小米数据漫游开关在哪(小米数据漫游开启方法)

  • wps查找在哪(wps查找在哪里)

    wps查找在哪(wps查找在哪里)

  • 本本拆卸技巧与注意事项(轻薄本拆卸)

    本本拆卸技巧与注意事项(轻薄本拆卸)

  • 购买金税盘和维税盘区别
  • 建筑业小规模纳税人 扣除分包款 开票
  • 企业清算所得税申报
  • 自来水安装增值税税率
  • 不征税收入计入应纳税所得额吗
  • 土地使用税是新增税吗
  • 资产负债表其他应付款包括哪些
  • 口罩属于什么经营类别
  • 银行会计核算方法的特点
  • 筹建期印花税退税分录
  • 应发工资和实发工资计算公式excel
  • 免费给客户提供服务怎么做账
  • 工商年报本期社保怎么填
  • 企业所得税的优点有哪些
  • 房地产企业汇算清缴
  • 个人房产税延期怎么办理
  • 个人独资企业对公账户的钱可以转到私人账户吗
  • 公司转让注册资金怎么弄
  • 流动比率计算公式速动比率
  • 视同销售存货账务处理方法是什么?
  • 经营性租赁购入会计分录
  • 企业账户短信提醒可以用别人手机号吗
  • 企业转让股权收入应于转让协议生效时确认收入的实现
  • 未休假报酬需要报个税吗
  • 无偿获得固定资产的会计处理
  • 补交的所得税会计核算
  • w11系统有哪些新功能
  • 电脑下载的文件打不开怎么回事
  • 以报销形式发放的工资 劳动仲裁
  • php实用的案例
  • 红冲以前年度暂估成本如何做账
  • 鸿蒙系统值得升级嘛
  • 先征后返的会计分录
  • 工资薪金所得具体包括哪些
  • 销售费用属于损益类科目的收入还是费用
  • PHP:disk_total_space()的用法_Filesystem函数
  • 汇算清缴期结束后
  • 生产设备改良支出计入什么费用
  • 主营业务收入借贷方向
  • php 进程间通信
  • html基础网页
  • reset=target
  • 固定资金是什么科目
  • 帝国cms功能
  • 大气污染物排放2020标准
  • 赔绿化损失费的法律规定
  • 银行询证函快递费计入什么科目
  • 公司购买基金入什么科目
  • 代收往来款的会计分录
  • 净资产包含哪些方面
  • 计提工资附什么单据
  • 纳税申报表上的销售额是不含税的吗
  • 恢复mysql数据库
  • sqlserver去掉字符串内的指定字符
  • 营业总收入和营业利润
  • mysql数据库错误日志
  • 固定资产出售的收入属于收入吗
  • 单位购买防疫物资请示
  • 固定资产折旧方法不考虑净残值
  • 制造费用是借还是贷
  • mysql_error
  • win 10怎么更换系统
  • 猎豹如何添加兼容性站点
  • 如何在ubuntu下安装和配置gcc并用C语言
  • 新装的ubuntu18没有网络
  • lol进入游戏后电脑没声音
  • guardhp.exe是什么意思
  • 在cenots下使用iso光盘文件重新安装CentOS的方法步骤
  • win7如何开机修复系统
  • windows超级管理员默认密码
  • win7系统ie8浏览器
  • windows8使用技巧
  • win10如何设置时间和日期
  • 文章标题用几号字体
  • php redis incr
  • easyui加载数据慢
  • 莱钢生产什么产品
  • 企业收取承包费如何缴纳增值税
  • 武汉车船使用税收费标准
  • 涉密人员保密教育培训可以采取
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设