Java开发——9.面向对象的特点(二):继承+super

简介: 面向对象的特点:封装、继承和多态。

面向对象的特点:封装、继承和多态。


继承(extends):

概念:

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,这个类就是父类,那么多个子类无需再定义这些属性和行为,只要继承那一个包含所需属性或者方法的类即可,大大减少了程序的冗余代码;

其中多个需要调用该方法的类可以称为子类,涵盖所需属性和方法类称为父类、超类(superclass)或者基类,其中,在Java中有个超类Object,Java中的所有类都直接或者间接地继承Object类。


继承需要注意:

类与类之间的继承为单继承,一个子类只能继承自一个父类;

   注:Object为一个特例,单继承只发生在类的extends中。

子类默认继承父类中的除私有属性和方法外的,所有属性和方法

子类在继承父类的属性和方法外,也可以拥有自己特有的属性和方法。


子类可以继承父类中的除私有属性或者方法以外的所有属性和方法,子类默认继承父类中的所以方法,其中也包含父类中已经写好的方法,如果子类想要调用该方法,可以对父类方法进行重写。


继承的优点:

1.提高了代码的复用性;

2.是多态的前提(使类与类之间产生了关系)。


继承的代码演示:


//Person_父类publicclassPerson {
privateintnum=15;
intnumber=100;
publicvoideat(){
System.out.println("吃饭");
    }
publicvoidsleep(){
System.out.println("睡觉");
    }
}


//父类可以派生出多个子类,但是子类只能继承一个父类(类之间为单继承


//Student子类publicclassStudentextendsPerson { 
//Student子类中没有任何方法,但是他的实现类却可以调用父类中的方法}
//Teacher子类publicclassTeacherextendsPerson {
intnum2=15;
//子类也可以有自己的属性和方法publicvoidfunction(){
//子类不能访问父类中私有的成员变量// System.out.println(num);System.out.println(num2);
System.out.println(number); //可以调用父类中非私有属性    }
 }



/** 定义测试类:子类默认继承父类中除私有私有属性和方法外的所有属性和方法*/publicclassPersonTest {
publicstaticvoidmain(String[] args) {
Students=newStudent();
s.eat(); //子类可以调用父类中的方法s.sleep();
Teachert=newTeacher();
t.eat();
t.sleep();
t.function();//子类也可以调用自己的方法    }
}


super关键字:

当父类中子类中定义的属性重名时,就需要使用super关键字来区分;super关键字和this关键字的使用方式相同,但是super关键字是用来指代父类对象的。


publicclassTeacherextendsPerson {
intnumber=200;
//子类成员方法publicvoidfunction(){
//如果子类成员变量的名与父类成中变量名一样,就近原则// System.out.println("Fu number="+number); //200   //我就想访问父类中的成员变量,怎么办?用superSystem.out.println(super.number);//此时访问的就是父类的成员变量 100    }
}

super关键字的使用:

【super.父类成员方法】,表示调用父类的成员方法

【super.父类成员变量名】,表示调用父类的成员变量

【super()】,表示访问父类中的无参构造

【super( 参数列表)】, 表示访问父类中的有参构造

 注:super 关键字和  this关键字 不能一起使用!


注意:

1.父类中的成员变量是非私有的,子类中可以直接访问。

2.若父类中的成员变量私有了,子类是不能直接访问的。通常编码时,我们遵循封装的原则,使用private修饰成员变量,子类访问父类中的私有属性时可以使用父类中提供公共的getXxx方法和setXxx方法。

3.构造方法的名字是与类名一致的。所有子类是无法继承父类构造方法的。

注:构造方法的作用是初始化成员变量的。

子类的初始化过程中,必须先执行父类的初始化动作。

子类的构造方法中默认有一个super() , 表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。在每次创建子类对象时,都会先初始化父类构造方法,再创建其子类对象本身。


构造方法的注意事项:

在子类构造方法中的第一行默认有 super() ,给父类进行初始化的;    

在子类构造方法中可以手动调用父类其他重载的构造方法  ;    

格式: super(参数列表);

super 是写在子类的构造方法的第一行。



方法的重写(Override):

针对子类中的方法名和父类中的方法名相同的情况。

重写发生在具有继承关系的两个类中!


重写的条件:

返回值类型、方法名和参数列表都相同。


注意重写和重载的区别:

重写,发生在具有继承关系的子类中,子类中的方法必须和父类中的方法名、参数列表以及返回值类型都相同;


重载,发生在类中,重载的类必须保证方法名相同,参数列表不同,但是重载和返回值类型无关,不能以返回值类型来判断方法的重载。


重写的代码演示:

//父类publicclassFather {
publicvoidshow(){
System.out.println("我是父类Father");
    }
publicvoidmethod(){
System.out.println("我是父类method");
    }
}
//子类publicclassSonextendsFather {
publicvoidshow2(){
System.out.println("我是子类Father");
    }
publicvoidmethod(){
System.out.println("我是子类method");
    }
}
//测试publicclassSonTest {
publicstaticvoidmain(String[] args) {
Sons=newSon();
s.show();//调用父类方法s.show2();//调用子类方法System.out.println("===================");
//方法重写:子类中出现了与父类中的一模一样的方法//子类重写了父类的方法s.method();
    }
}
相关文章
|
2月前
|
Java API Maven
如何使用Java开发抖音API接口?
在数字化时代,社交媒体平台如抖音成为生活的重要部分。本文详细介绍了如何用Java开发抖音API接口,从创建开发者账号、申请API权限、准备开发环境,到编写代码、测试运行及注意事项,全面覆盖了整个开发流程。
204 10
|
2月前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
9天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
1月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
56 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
19天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
100 13
|
24天前
|
算法 Java API
如何使用Java开发获得淘宝商品描述API接口?
本文详细介绍如何使用Java开发调用淘宝商品描述API接口,涵盖从注册淘宝开放平台账号、阅读平台规则、创建应用并申请接口权限,到安装开发工具、配置开发环境、获取访问令牌,以及具体的Java代码实现和注意事项。通过遵循这些步骤,开发者可以高效地获取商品详情、描述及图片等信息,为项目和业务增添价值。
56 10
|
17天前
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
54 2
|
27天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
29天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
25 1
|
2月前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
116 1