面向对象之继承

继承的基本概念

概念 

(1)继承是面向对象的三大特征之一,继承可以解决编程中代码冗余的问题,是实现代码重用的重要手段之一。 

(2)继承是软件可重用的一种表现,新类可以在不增加自身代码的情况下,通过从现有的类中继承其属性和方法,来充实自身内容,这种现象或行为就称为继承。此时,新类称为子类,现有的类称为父类。 

(3)继承最基本的作用就是使得代码可重用,增加软件的可扩充性。 

(4)Java中只支持单根继承,即每个类只能有一个直接父类。 

(5)继承表达的是“XX is a XX”的关系,或者说是一种特殊和一般的关系。如Dog is a Pet. 

 语法

[访问修饰符] class <SubClass> extends <SuperClass>{
                //代码
     } 

说明 

1、在Java中,继承通过extends关键字实现,其中SubClass称为子类,SuperClass称为父类或基类。

 2、访问修饰符如果是public,那么该类在整个项目中可见。

 3、若不写访问修饰符,则该类只在当前包中可见。

 4、 在Java中,子类可以从父类中继承的内容
            可以继承public和protected修饰的属性和方法,不论子类和父类是否在同一个包里。
            可以继承默认访问修饰符修饰的属性和方法,但是子类和父类必须在同一个包里。
            无法继承父类的构造方法

继承的应用

    使用面向对象编写部门类,目前共有8个部门,需要定义8个类,各个部门有很多共同的属性,导致很多代码都是一样的,只有很少一部分不一样。
    使用继承,就可以对相同的代码实现重用,提高工作效率。

使用继承和重写完善类的结构


使用继承和重写实现部门类及子类

1. 使用继承定义部门类及子类

    定义Department类,作为父类
    定义人事部类、研发部类等类作为子类,实现继承。子类中保留的代码都专属于该子类,和其他子类之间没有重复的内容。

2. 使用super关键字调用父类成员

(1)super关键字代表父类引用,和this关键字的作用类似,都是将屏蔽了的成员变量、成员方法变得可见、可用,也就是说,用来引用被屏蔽的成员变量或成员方法。
(2)super是用在子类中,目的只有一个,就是访问直接父类中被屏蔽的内容,进一步提高代码的重用性和灵活性。
(3)super关键字可以访问父类的构造方法、属性、一般方法。
(4)通过super访问父类成员的语法格式
                语法
                    访问父类构造方法:super(参数)
                    访问父类属性/方法:super.<父类属性/方法>
                说明
                    super只能出现在子类(子类的方法和构造方法)中,而不是其他位置。
                    super用于访问父类的成员,如父类的属性、方法、构造方法。
                    具有访问权限的限制,如无法通过super访问父类的private成员。

实例化子类对象

1、在Java中,一个类的构造方法在如下两种情况下总是会被执行。
                创建该类的对象(实例化)
                创建该类的子类的对象(子类的实例化)
2、当在Java语言中创建一个对象时,Java虚拟机会按照父类—子类的顺序执行一系列的构造方法。
3、子类继承父类时构造方法的调用规则如下
         1)如果子类的构造方法中没有通过super显示调用父类的有参构造方法,也没有通过this显示调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。 在这种情况下,是否写“super();”语句,效果是一样的。
         2)如果子类的构造方法中通过super显示地调用了父类的有参构造方法,那么将执行父类相应的构造方法,而不执行父类无参构造方法。
         3)如果子类的构造方法中通过this显示地调用了自身的其他构造方法,在相应构造方法中遵循以上两条规则。
         4)如果存在多级继承关系,在创建一个子类对象时,以上规则会多次向更高一级传递,一直执行到顶级父类Object类的无参构造方法为止。

 Object类

 概念

1、Object类是所有类的父类。
2、在Java中,所有的类都直接或者间接地继承了java.lang.Object类。
3、Object类是所有Java类的祖先。
4、在定义一个类时,没有使用extend是关键字,也就是没有显示地继承某个类,那么这个类直接继承Object类。
5、所有对象都继承Object类中的方法。
6、Object类中的equals()方法用来比较两个对象是否是同一对象,若是,返回true,字符串对象的equals()方法用来比较两个字符串的值是否相等,java.lang.String类重写了Object类中的equals()方法。

常用方法

toString():返回当前对象本身的有关信息,返回字符串对象
equals():比较两个对象是否是同一个对象,若是,返回true,反之返回false
clone():生成当前对象的一个副本,并返回
hashCode():返回该对象的哈希代码值
getClass():获取当前对象所属的类信息,返回Class对象

方法重写

概念

如果从父类继承的方法不能满足子类的需求,可以在子类中对父类的同名方法进行重写(覆盖),以符合需求。

 规则

1、重写方法和被重写方法必须具有相同的方法名
2、重写方法和被重写方法必须具有相同的参数列表
3、重写方法的返回值类型必须和被重写方法的返回值类型相同或者是其子类
4、重写方法不能缩小被重写方法的访问权限。


方法重载和方法重写的区别

方法重载

位置:  同一个类中
方法名:相同
参数列表:不同
返回值:无关
权限修饰符:无关

方法重写

位置:子类中
方法名:相同
参数列表:相同
返回值:相同或是其子类
权限修饰符:不能比父类更严格

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值