继承
使用继承重新定义部门类
1.继承的基本概念
继承是面向对象的三大特征之一,继承可以解决编码中代码冗余的问题,是实现代码重用的重要手段之一。继承是软件可重用性的一种表现,新类可以在不增加自身代码的情况下,通过从现有的类中继承其属性和方法,来充实自身内容,这种现象和行为叫做继承。此时新类称为子类,现有类称为父类。继承最基本的作用就是使得代码可重用,增加软件的可扩充性。
java只支持单继承,即每个类只有一个直接父类。
语法格式:
[访问修饰符】class<SubClass>extends<SuperClass>{
}
1) 在Java中,继承通过extends关键字来实现,其中SubClass称为子类,SurerClass称为父类或者基类。
2)访问修饰符如果是public,该类在整个项目可见
3)若不写访问修饰符,则该类只在当前包中可见。
4)在Java中,子类可以从父类继承以下内容
1.可以继承public和protected修饰属性和方法,不论子类和父类是否在相同的一个包里。
2.可以继承默认访问修饰符的属性和方法,但是子类和父类必须在同一个包里
3.无法继承父类的构造方法
2.继承的应用
若使用对象编写部门类,有5个部门,需要定义5个类,各个部门有很多相同属性,导致很多代码都是一样的,如果使用继承,就可以对相同的代码实现重用,提高工作效率。
使用继承和重写完善类结构
1.使用继承和重写实现部门类和子类
1)使用继承定义部门类和子类
2)使用super关键字调用父类成员
语法格式:
访问父类构造方法:super(参数)
访问父类属性/方法:super.<父类属性/方法>
super只能出现在子类(子类的方法和构造方法)中,而不是其他位置。
super用于访问父类的成员,如父类的属性方法 构造方法。
具有访问权限限制,如无法通过super访问父类的private成员。
3.实例化子类对象
在java中,一个类的构造方法在如下两种情况会被执行。
1)创建该类的对象(实例化)
2)创建该类的子类对象(实例化)
因此,子类实例化时,会首先执行其父类的构造方法,然后才会执行子类的构造方法。
子类继承父类时构造方法的调用规则如下
1)如果子类的构造方法中没有通过supper显示调用父类的有参构造方法,也没有通过this显示调用自身其他的构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,是否写super();语句,效果都是一样的 。
2)如果子类的构造方法中通过super显示的调用了父类的有参构造方法,那么将执行父类相应的构造方法,而不执行父类的无参构造方法
3)如果子类的构造方法中通过this显示的调用自身的其他构造方法,在相应构造方法中遵循以上两条规则。
特别需要注意的是,如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级父类传递,一直执行到顶级父类Object类无参构造方法为止。
4.Object类
Object类是所有类的父类。在Java中,所有的Java类都是直接或者间接的继承了java.lang.Object类,Object类是所有java类的祖先。在定义一个类时,没有使用extends关键字,也就是没有显示的继承某个类,那么这个类直接继承Object类。所有对象都继承这个类的方法。
方法重写
方法重写必须满足以下要求
1.重写方法和被重写方法必须具有相同的方法名
2.重写方法和被重写的方法必须具有相同的参数列表
3.重写方法的返回值类型必须和被重写的方法返回值类型相同或者是其子类
4.重写方法不能缩小被重写方法的访问权限
重载和重写的区别
1.重载涉及同一个类中的同名方法,要求方法名相同,参数列表不同,与返回值类型无关。
2.重写涉及的是子类和父类之间的同名方法,要求方法名相同,参数列表相同,返回值类型相同