在上一篇博客中,我们总结了OOP中的类的一些基本定义。
在java中有许多的类,因此存在一些类之间有继承的关系。那么什么是继承呢?
一.继承
在面向对象程序设计中,可以在已有的类的基础上定义新的类,而不需要把已有类的内容再写一遍,这就叫做继承。
例子:
举一个生活中的例子:电脑是一个类,电脑可以用来上网。那么台式机,笔记本等就是电脑的子类,它们都可以用来上网。
我们为什么要使用继承呢?
- 方便,少用很多重复的代码(提高代码的重用性)。
- 提高程序的扩展性。
了解了什么是继承和使用继承的原因,我们现在看一下java继承的语法格式。
java继承的关键字:extends
格式:
public class 类名(子类名或超类名) extends 类名(父类名或基类名){ //代码 }
注意:子类继承父类后,那么必须要有一个参数个数,参数类型和参数顺序和父类构造函数完全相同的构造函数。
例子:public class UNStudent extends Student{}
在这个继承中如果Student类中存在一个构造函数:
public Student(String name){ this.name = name; }
那么在子类UNStudent中必须存在这样的一个构造函数:
public UNStudent(String name) { super(name); //super关键字表示的是要调用父类中带一个字符串参数的构造方法。 }
我们定义了一个继承了父类的子类,那么子类与父类存在什么样的关系呢?也就是:
子类能继承到父类的那些方法和属性呢?
子类能继承到父类所有的属性和方法(构造方法除外)。
子类继承了属性和方法那些是能够使用的呢?
子类能使用父类中的一个部分方法和属性:
1.公有的属性和方法
2.受保护的属性和方法
3.默认的属性和方法(不写访问修饰符的属性和方法)
例子:同样是Student 和UNStudent的例子:
public class Student { private String name;//定义一个姓名属性 private double score;//定义一个学分属性 public void study(){ score++; System.out.println(name+"正在学习中,学分是"+score); } }
相应地定义子类
public class UNStudent extends Student {}
此时,UNStudent继承了Student中所有的属性和方法,但是可以使用的只有study()这个方法。
二.当父类和子类都相同的方法,但是子类中方法的具体实现和父类不同时,可以使用方法的重写。
方法的重写:
重写的条件是:
1.方法的返回值数据类型、方法名、参数个数、参数类型以及参数顺序都必须要和父类的完全相同。
2.子类在重写方法时,方法的访问修饰符可以大于或者等于父类方法的访问修饰符。
public --> protected 默认的 --> private
例子:同上一个例子
在Student的类中有这样的一个学习方法:
public void study(){ score++; System.out.println(name+"正在学习中,学分是"+score); }
那么在UNStudent子类要使用另一个study()方法,方法的定义如下:
public void study(){ System.out.println(this.getName()+"的学习方式不同啦!"); }
在生活中存在有类似的例子:
电脑包括:台式机和平板电脑。电脑可以上网是一个方法,台式机的上网方法相同,而平板电脑的上网可以用触屏来使用,那么平板电脑的上网就是一种重写。
三. 方法重写后调用:
根据实例化的对象,而进行不同的调用,如果实例化的对象是子类的,那么就会优先执行子类中定义或重写方法,如果子类中没有这些方法,则调用父类中的方法。
UNStudent un = new UNStudent("孙哥"); //调用方法以及属性 un.study(5); //调用时会判断,优先执行了子类中的study()方法。
因为存在有子类和父类两个类,那么在实例化对象的过程中就会存在自动转型。
条件:要实现自动转型就必须要存在继承关系。
格式一:
父类名 对象名 = new 子类名();
Student stu = new UNStudent();
还有一种特殊但是重要的自动转型。我们先举一个现实生活中的例子:
教大学生英语的老师,ta教的是大学生,那么这老师是否可以教小学生?能不能教初中生,那么高中生,其他类型的学生呢?
public class Teacher { /** * 定义一个教学的方法 * @param stu是一个父类类型的参数,这样就表示可以接受所有Student以及Student子 类的对象。 */ public void teach(Student stu){ System.out.println(name+"在教"+stu.getName()+"学习英语!"); stu.study();//学生调用自己的学习方法 } }
在teach这个方法中传递了一个父类Student中stu这个对象,这样就表示可以接受所有Student以及Student子类的对象。
那么:在定义方法中就存在自动转型
格式二:
public 返回值数据类型 方法名(父类名 对象名){ //调用在父类中定义过的方法 }
实例化对象可以:
1.父类名 对象名A = new 子类名();
2.子类名 对象名B = new 子类名();
调用方法:
1.方法名(对象名A);
2.方法名(对象名B);
那么自动转型的优点就是:
节省重复的不必要的代码。
四.多态:
我们了解了java类的继承,那么就会存在由方法重载,继承,方法重写,自动转型等技术点所以引起的一些列问题——多态。
存在多态的原因:
Java在编译的时候并不能确定最终要执行的方法是哪一个;只会根据对象名的类型去判断,调用的方法存不存在,如果这个方法在对象名的类中不存在,则跑出语法错误。
Java只有在运行的那一刻才能知道最终要执行的方法是哪一个。
本篇博文讲解了类的继承以及关于继承的一些知识点,谢谢大家。
相关推荐
《面向对象程序设计——Java语言》是一门深入探讨如何使用Java进行面向对象编程的课程,由知名讲师程细柱制作的PPT电子课件。面向对象编程(Object-Oriented Programming,简称OOP)是现代软件开发中的核心编程范式...
面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它通过将数据和操作数据的方法封装在对象中,实现了程序设计的模块化和抽象化。本教程对比了两种广泛应用的面向对象语言——C++和Java...
面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它基于“对象”的概念,将数据和操作这些数据的方法封装在一起。在Python中,面向对象编程是其核心特性之一,使得Python成为了一种非常适合...
Java基础——面向对象编程 面向对象编程(Object-Oriented Programming,OOP)是一种编程方法,它将现实世界中的对象抽象出来,并使用计算机模型来描述。面向对象编程的核心概念是类(class)和实例(instance)。...
面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将复杂的问题分解为一系列相互协作的对象,以实现更清晰、可维护的代码结构。在“JAVA语言与面向对象程序设计”一书中,通常会涵盖以下几个...
通过学习"Java语言与面向对象程序设计"这门课程,学生将不仅掌握Java编程的基本技能,还能理解面向对象编程的精髓,为编写高效、可靠的软件打下坚实的基础。配合印旻和王行言的答案解析,学生能更好地理解课程内容,...
然而,相比起C++或Java等支持面向对象编程(Object-Oriented Programming, OOP)的语言,C语言本身并不直接内置面向对象的特性。但这并不意味着我们不能在C语言中实现面向对象的概念。这篇博客“C语言也能面向对象...
【北大青鸟ACCP6.0 第二学期 S2 JAVA oop面向对象】课程是针对Java编程中的核心概念——面向对象编程(OOP)进行深入讲解的教程。面向对象编程是一种编程范式,它将复杂的问题分解为多个独立的对象,通过对象之间的...
在Java编程语言中,面向对象编程(OOP)是一种核心概念,它基于类和对象的概念,以及封装、继承和多态三大特性。在本文中,我们将深入探讨这些知识点,以便更好地理解Java中的面向对象编程。 首先,让我们回顾一下...
Java语言完全支持面向对象编程,其三大特性——封装、继承和多态,是OOP的核心。 1. 封装:这是面向对象编程的基础,它将数据和操作数据的方法捆绑在一起,形成一个独立的实体,即对象。在Java中,通过访问修饰符...
#### 一、面向对象编程语言的发展史 面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,其核心在于将现实世界中的对象及其属性和行为映射到软件系统中,从而使得程序更加直观、易于理解...
### Java的面向对象编程——继承、接口、包 #### 一、面向对象编程基础 **1.1 类与对象** 面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,它将数据和对数据的操作封装在一个实体内,即类...
适合人群:具备一定的编程能力,对Java语言的基本语法有一定的了解,适合在校大学生 能学到什么: ① 做系统的基本框架与思路 ② 功能模块化,后集体调用,方便后期管理 ③ 代码的规范使用 阅读建议: ①可以打开...
Java作为一种典型的面向对象编程语言,充分体现了面向对象的核心思想。 #### 二、Java面向对象的三大特征 ##### 1. 封装 **概念**:封装是面向对象编程的核心之一,它指的是将数据(属性)和方法(行为)绑定在...
面向对象编程(Object-Oriented Programming,简称 OOP)是一种程序设计思想,它将数据和操作数据的方法定义为统一的整体——对象(Object),并通过类(Class)来实现对象的创建。在Java语言中,面向对象编程的主要...
本实例——"Java面向对象编程经典实例-模拟彩票",是通过Java语言来实现一个彩票模拟系统,以帮助开发者更好地理解和掌握面向对象设计思想。 首先,我们来看"模拟彩票"这个主题。在实际生活中,彩票系统包含了购买...
面向对象编程方法在Java中体现在类和对象的创建,以及类中的成员变量和方法的定义。例如,`Student`类展示了如何定义一个对象,包含私有属性如ID、姓名、年龄等,以及公共方法如设置姓名、学习课程和自我训练。 ...
javaoop.zip 06.Java面向对象编程(计算器) javaexception.zip 07.Java面向对象编程扩展(计算器异常捕捉实例) 第3部分(5个程序包) javaio.zip 09.Java输入/输出流 javavi.zip 09.Java输入/输出流上机作业...
面向对象编程(OOP)是一种编程范式,它使用“对象”来设计软件。对象可以包含数据,以字段的形式存在,通常被称为属性或特征;还可以包含代码,通常以方法的形式存在。对象内的方法可以访问和修改对象内的数据。 ...