Java 面向对象之继承篇详解原理与特点
一、前言
前面我也们讲述了相关封装的,现在我们先认识的继承的概念和使用。
二、继承
什么是继承呢?
继承在显示生活中也不少见,比如继承财产之类的,在我们java学习中也有类似的使用,
继承者称作子类也叫派生类,被继承者称作父类、基类或超类,objec类是所有类的父类
(后期介绍)
继承的好处与弊端
好处:就是提高了代码的维护性(多个代码需要修改,只需要修该一处即可)。
提高了代码的复用性(多个相同的成员可以方法到同一个类中)
弊端:继承的缺点就是使代码之间的耦合度高,修改父类子类也会跟着变化
继承的使用场景?
两个有从属关系的,比如猫和动物,学生和人等。
继承的关键词是extends。
继承的格式:
public class 子类名 extends 父类名{}
举例:
public class Cat extends Animal{}//猫继承动物类
继承的特点:
子类可以拥有父类的非私有方法和成员变量,也可以重写父类的非私有(private修饰的)方法。所有子类的方法都默认访问父类的无参构造
重写的概念:
重写是子类重述父类中的非私有方法,重写的一般特点是方法名相同,格式相同,返回类型相同、方法体不同
如:
fu类中:
public class fu{ public void play(){ System.out.println("fu喜欢打羽毛球"); } }
zi类中:
public class zi extends fu{ public void play(){//对父类的方法重写 System.out.println("zi喜欢打篮球"); } }
还可以这么写,访问权限需要zi类大于等于fu类
fu类中修饰是默认:
public class fu{ void eat(){ System.out.println("fu中eat方法"); } }
zi类中:
public class Zi extends Fu { @Override//检测方法重写的正确性 public void eat() { System.out.println("zi中的eat方法"); } }
zi类中重写:
public class Zi extends Fu { // @Override写不写不会影响,这个只是起到辅助作用 void eat() { System.out.println("zi中的eat方法"); } }
zi还可以:
public class Zi extends Fu { @Override protected void eat() { System.out.println("zi中的eat方法"); } }
修饰访问关系:public>protected>默认(不写)>private
当父类的权限修饰符是默认(也就是不写修饰符),子类重写的修饰方法可以是默认和
默认之前的以此类推。注:当父类的权限修饰符是private时,那子类可不是private
之前的。当父类被private修饰时,子类不能重写此类方法。
super关键字
当子类中的成员变量和父类中成员变量同名时,我们想使用父类中的成员变量时,
或者我们重写了父类中方法时,我们还想调用父类中的方法时。此时我们就要使用super
关键字来调用父类中的成员。
super和this的比较
super和this的使用原理差不多,this是解决了局部变量和成员变量同名时,局部变量对
成员的覆盖super是解决子类对父类的覆盖。
当局部变量,成员变量,父类中的变量同名时,访问的是局部变量。可以用this和super改变。
public class fu{ public int age=40; public fu(){}//无参构造 public fu(int age){//带参构造 this.age=age;} public void eat(){ System.out.println("fu中eat方法"); } } public class Zi extends Fu { public int age=18; public Zi(){} public Zi(int age){ this.age=age;} public void eat() { super.eat(); System.out.println("zi中的eat方法"); } public void show(){ int age=1; System.out.println(age);//1局部变量的值 System.out.println(this.age);//18子类成员中的值 System.out.println(super.age);//40父类中的值 } public class Demo{ public static void main(String[] args){ zi z=new zi(); z.eat(); z.show(); } }
下篇我们继续!!
到此这篇关于Java 面向对象之继承篇详解原理与特点的文章就介绍到这了,更多相关Java 继承内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
原文出处:https://blog.csdn.net/weixin_60719453/article/details/120860
相关文章
- 这篇文章主要介绍了如何利用java语言实现经典《复杂迷宫》游戏,文中采用了swing技术进行了界面化处理,感兴趣的小伙伴可以动手试一试...2022-02-01
java 运行报错has been compiled by a more recent version of the Java Runtime
java 运行报错has been compiled by a more recent version of the Java Runtime (class file version 54.0)...2021-04-01- 这篇文章主要介绍了在java中获取List集合中最大的日期时间操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了教你怎么用Java获取国家法定节假日,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下...2021-04-23
- 这篇文章主要介绍了Java如何发起http请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-31
- 说起C#和Java这两门语言(语法,数据类型 等),个人以为,大概有90%以上的相似,甚至可以认为几乎一样。但是在工作中,我也发现了一些细微的差别...2020-06-25
- 这篇文章主要介绍了解决Java处理HTTP请求超时的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
- 这篇文章主要介绍了java 判断两个时间段是否重叠的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-15
- 这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-04-02
- 这篇文章主要介绍了Java生成随机姓名、性别和年龄的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-01
java 画pdf用itext调整表格宽度、自定义各个列宽的方法
这篇文章主要介绍了java 画pdf用itext调整表格宽度、自定义各个列宽的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-31- 这篇文章主要介绍了java正则表达式判断前端参数修改表中另一个字段的值,需要的朋友可以参考下...2021-05-07
Java使用ScriptEngine动态执行代码(附Java几种动态执行代码比较)
这篇文章主要介绍了Java使用ScriptEngine动态执行代码,并且分享Java几种动态执行代码比较,需要的朋友可以参考下...2021-04-15- 这篇文章主要介绍了Java开发实现人机猜拳游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-03
- 这篇文章主要介绍了Java List集合返回值去掉中括号('[ ]')的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-29
Java中lombok的@Builder注解的解析与简单使用详解
这篇文章主要介绍了Java中lombok的@Builder注解的解析与简单使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-01-06- 下面小编就为大家带来一篇java中String类型变量的赋值问题介绍。小编觉得挺不错的。现在分享给大家,给大家一个参考。...2016-03-28
Java 8 Stream 的终极技巧——Collectors 功能与操作方法详解
这篇文章主要介绍了Java 8 Stream Collectors 功能与操作方法,结合实例形式详细分析了Java 8 Stream Collectors 功能、操作方法及相关注意事项,需要的朋友可以参考下...2020-05-20- 这篇文章主要介绍了Java线程池中的各个参数如何合理设置操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-06-19
- 在Java中,我们可以利用多线程来最大化地压榨CPU多核计算的能力,下面这篇文章主要给大家介绍了关于java中多线程与线程池基本使用的相关资料,需要的朋友可以参考下...2021-09-13