网站首页 > java教程 正文
1. 继承思想
需求,使用面向对象的知识定义出老师(Teacher)、学生(Student)、员工(Employee)三个类:
n 老师:拥有名字、年龄、级别三个状态,有授课和休息两个功能
n 学生:拥有名字、年龄、学好三个状态,有学习和休息两个功能
n 员工:拥有名字、年龄、入职时间三个状态,有工作和休息两个功能
代码截图如下:
此时,发现三个类中的存在着大量的共同代码,而我们要考虑的就是如何解决代码重复的问题。
面向对象的继承思想,可以解决多个类存在共同代码的问题。
继承关系设计图:
记住几个概念:
- 被继承的类,称之为父类、基类
- 继承父类的类,称之为子类,拓展类
- 父类:存放多个子类共同的字段和方法
- 子类:存放自己特有的字段和方法
1.1. 继承语法(重点)
在程序中,如果一个类需要继承另一个类,此时使用extends关键字。
public class 子类名 extends 父类名{
}
注意:Java中类只支持单继承,但是支持多重继承。也就是说一个子类只能有一个直接的父类,父类也可以再有父类。
n 下面是错误的写法! Java中的类只支持单继承。
class SuperClass1{}
class SuperClass2{}
class SubClass extends SuperClass1,SuperClass2{}错误
n 下面代码是正确的。一个父类可以有多个子类。
class SuperClass{}
class SubClass1 extends SuperClass{}
class SubClass2 extends SuperClass{}
n 下面代码是正确的,支持多重继承。
class SupperSuperClass{}
class SupperClass extends SupperClass{}
class SubClass extends SupperClass
n Object类是Java语言的根类,任何类都是Object的子类,要么是直接子类,要么是间接子类(后讲)
public class Person{} 等价于 public class Person extends Object{}
1.1.1. 继承操作(重点)
父类代码:
子类代码:
测试代码:
1.1.2. 子类可以继承到父类哪些成员(了解)
子类继承父类之后,可以拥有到父类的某一些成员(字段和方法),根据访问修饰符来判断:
- 如果父类中的成员使用public和protected修饰,子类都能继承.
- 如果父类和子类在同一个包中,使用缺省访问修饰的成员,此时子类可以继承到
- 如果父类中的成员使用private修饰,子类继承不到。private只能在本类中访问
- 父类的构造器,子类也不能继承,因为构造器必须和当前的类名相同
1.2. 方法覆盖(掌握)
子类继承了父类,可以拥有父类的部分方法和成员变量。可是当父类的某个方法不适合子类本身的特征时,此时怎么办?比如鸵鸟(Ostrich)是鸟类(Bird)中的一个特殊品种,所以鸵鸟类是鸟类的一个子类,但是鸟类有飞翔的功能,但是对应鸵鸟,飞翔的行为显然不适合于它。
父类:
子类:
public class Ostrich extends Bird{
}
测试类:
运行结果:
飞呀飞...
上述代码从语法是正确的,但从逻辑上是不合理的,因为鸵鸟不能飞翔,此时怎么办?——方法覆盖操作。
1.2.1. 方法覆盖操作(重点掌握)
当子类存在一个和父类一模一样的方法时,我们就称之为子类覆盖了父类的方法,也称之为重写。那么我们就可以在子类方法体中,重写编写逻辑代码。
运行测试代码:
扑扑翅膀,快速奔跑...
方法的调用顺序:
通过对象调用方法时,先在子类中查找有没有对应的方法,若存在就执行子类的,若子类不存在就执行父类的,如果父类也没有,报错。
方法覆盖的细节:
private修饰的方法不能被子类所继承,也就不存在覆盖的概念。
① 实例方法签名必须相同 (方法签名= 方法名 + 方法的参数列表)
② 子类方法的返回值类型是和父类方法的返回类型相同或者是其子类
③ 子类方法中声明抛出的异常小于或等于父类方法声明抛出异常类型
④ 子类方法的访问权限比父类方法访问权限更大或相等
上述的方法覆盖细节真多,记不住,那么记住下面这句话就万事OK了。
精华:直接拷贝父类中方法的定义粘贴到子类中,再重新编写子类方法体,打完收工!
1.2.2. super关键字(掌握)
问题,在子类中的某一个方法中需要去调用父类中被覆盖的方法,此时得使用super关键字。
如果调用被覆盖的方法不使用super关键字,此时调用的是本类中的方法。
super关键字表示父类对象的意思,更多的操作,后面再讲。
super.fly()可以翻译成调用父类对象的fly方法。
本系列教程为叩丁狼Java基础班内部教材,若要获得最好的学习效果,需要配合对应教学视频一起学习。需要完整教学视频,请私信作者。
- 上一篇: 一篇文章带你了解Java继承那些事儿
- 下一篇: java4个技巧:从继承和覆盖,到最终的类和方法
猜你喜欢
- 2024-10-03 Java中的继承关系(java中的继承关系是)
- 2024-10-03 Java面向对象之继承(java面向对象继承例题)
- 2024-10-03 「Java入门」十八 面向对象的三大特征之一-继承
- 2024-10-03 [Java基础]09.继承(java基础案例教程第二版)
- 2024-10-03 Java中的继承、封装、多态 #Java开发
- 2024-10-03 Java中的继承与组合(java中继承的概念以及使用继承的好处)
- 2024-10-03 《极简Java新手编程之道》8.1.1 Java语言中实现继承
- 2024-10-03 Java:类与继承(java类与继承抽象类)
- 2024-10-03 Java基础——面对对象-继承(面对对象的特征有哪些方面java基本数据类型有哪些)
- 2024-10-03 你真的熟悉Java中的继承与多态?给你几分钟能回答上来?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)