继承是面向对象的第二个基本特征,通过继承可以实现父子关系,以及代码的复用。
一、继承
Java的继承通过extends关键字来实现,实现继承的类称为子类,被继承的类被称为父类,有的也称为基类(超类)父类和子类的关系是一种特殊的关系。也可以认为父类是大类,而子类是小类。不过一般也可以称为子类是父类的扩展、延伸。
1、Java子类继承父类的语法格式为:
例如:猫类继承动物类。
2、继承的作用
3、extends关键字
Java中只支持单继承,每个Java类最多只能有一个父类。Java类体系中的根类是java.lang.Object,所有类都是Object的直接子类或间接子类。如果定义类时没有extends字句,则该类的父类默认为Object。
二、方法重写
在继承中,子类可以定义和父类相同的名称且参数列表一致的函数,将这种函数称之为函数的重写,也就是子类中重新定义父类中已有的办法。
1、重写的要求
(1)、子类重写父类的方法时,方法的名称和参数列表必须和父类保持一致
(2)、子类重写方法的访问权限必须大于等于父类中被重写方法的访问权限,否则会报错。
(3)、子类中重写方法的返回值必须是父类中方法的返回值类型或该类型的子类。
(4)、子类中重写方法不能比父类中被重写方法产生更多的异常类型。
(5)、父类的改造函数是不能被子类继承的,因此不能在子类中重写。但是可以使用super关键字来访问父类中的改造函数
2、重写方法的调用顺序
动物类(父类)
狗类(子类)
2、方法重写和重载的区别
(1)、重写用于继承关系的父子类中,不能用于同一个类中。而重载通常用于同一个类中。
(2)、重写用于更改父类方法中的行为,或者实现接口中的方法。而重载用于为一个行为提供多种实现方式。
(3)、重写特点:函数名必须相同、参数列表必须相同。子类的返回值类型要等于或者小于父类的返回值等,子类的作用域不能小于父类中方法的作用域,子类抛出的异常类型不能大于父类中方法的异常类型。
(4)、重载的特点:函数名相同,参数列表不同,与访问控制符、返回值类型等无关。
三、继承特性
- Java只支持单继承,不允许多重继承;但是Java支持多层继承
(1)、一个子类只能有一个父类;只有唯一的亲生父亲
(2)、一个父类可以派生出多个子类;子孙满堂
(3)、Java支持多层继承;代代相传
(4)、被继承的类称之为父类(基类),继承的类称之为子类 - 子类可以继承父类的非私有属性和非私有方法
- 子类可以扩展父类没有的属性和方法
- 子类不会继承父类的构造方法。
- 子类一定会调用父类的构造器。因为在创建子类对象时,一定会先为从父类继承的属性进行初始化,所以要调用父类的构造器
- 在子类中无论写不写super()都会调用父类的无参构造。如果要写,则必须在子类构造器首行。如果父类没有无参构造,必须在子类的构造器首行使用super(实参列表)显式调用父类的有参构造,否则编译报错;
- 不要为了使用继承而继承。例如:让工人继承学生。
四、final关键字
final关键字主要用于修饰类、属性、方法,以及方法的形参。final在类之前,该类不能被继承;final在方法之前,该方法不能被重写。final在变量之前,该变量不能被修改,因为它已经是一个常量了。
- final修饰类
- 修饰成员属性
- 修饰引用类型
java基础父类子类
- 修饰方法
- 修饰形参
五、接口
因为Java不像c++支持多继承,只支持单继承。为了实现类似于多重继承的效果,Java提供了接口来拓展类的功能,弥补Java中单继承的缺点。
- 定义
接口就是抽象方法和常量值定义的集合,一般来讲这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现
例如
- 接口实现
使用关键字implements,例如实现单接口
- 多接口实现
最后测试
- 总结
(1)、接口没有构造方法。
(2)、接口中定义的所有属性默认是 public static final的,即静态常量。
(3)、接口中定义的所有方法默认是public abstract的,即抽象方法。
(4)、由于接口中的定义的所有方法默认都是抽象的,所以接口不能被实例化。
(5)、有抽象函数的不一定是抽象类,也可以是接口。
(6)、类可以通过implements实现接口,一个类可以实现多个接口。
(7)、如果类没有实现接口中的所有方法,那么类必须是抽象类。
(8)、如果在类中访问接口中的属性,不能使用super关键字,因为两者之间没有显示的继承关系。可以使用“接口名.属性名”直接访问。
(9)、接口是支持多重继承的,即一个接口可以有多个父接口
抽象类
特点
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/20615.html