面向程序设计(三)

目录

一、 继承

1. 为什么需要继承

2. 概念理解

3. 实现

二、 覆盖

1. 概念

2. 重写(Override)与重载(Overload)的区别

三、 多态

1. 概念

2. 使用多态

3. 父类与子类之间的转换

四、 抽象类和接口

1. 抽象类

2. 接口(Interface)

五、 其他

1. 关键字final

2. Object类


一、 继承

1. 为什么需要继承

        假如我们要开发一个复杂的文字处理软件,类似Word,其中含有很多对话框。

        

        我们发现,各个对话框中,似乎有一些类似的特征,比如,上面的例子中,每个对话框都有宽度和高度,都有背景颜色,都有标题,都可以显示,都可以关闭……如果将这些对话框中的共同功能写在一个类中,让每个对话框都来这“继承”类中的功能。

2. 概念理解

        继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

        在java中,被继承的类称为父类、基类或超类,与之对应的类称为子类或派生类。

3. 实现

3.1 语法结构

class 父类名{
    父类主体;
}

类修饰符 class 子类名 extends 父类名{
    类的主体;
}

注意:

  • 如果一个成员要被子类继承之后使用,这个成员不能是 private 类型,因为私有的成员不能在类的外部使用,当然也不能被子类使用。一般情况下,成员变量定义为 protected 类型,成员函数定义为 public 类型。
  • java不支持多重继承,一个子类只能有一个父类,不允许出现一下情况。
class 子类 extends 父类1,父类2 { }
  • 在java中可以有多层继承,如A继承B,B又继承了C。此时相当于A间接地继承了C。

 3.2 继承关键字

        继承可以使用 extendsimplements 这两个关键字来实现继承,而且所有的类都是继承于 java.lang.Object,当一个类没有继承的两个关键字,则默认继承object(这个类在 java.lang 包中,所以不需要 import)祖先类。

        extends:在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。

        implements:使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。

        super:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。

        this:指向自己的引用。

二、 覆盖

1. 概念

如果子类中得到函数定义和父类相同,最后调用时是调用子类中的方法,称为覆盖或 重写(Override)。重写内容在《面向对象编程》第一篇中有写。

2. 重写(Override)与重载(Overload)的区别

        重载发生在本类,方法名相同,参数列表不同,与返回值无关,只和方法名,参数列表,参数的类型有关.

        重载(Overload):首先是位于一个类之中或者其子类中,具有相同的方法名,但是方法的参数不同,返回值类型可以相同也可以不同。

        (1):方法名必须相同

        (2):方法的参数列表一定不一样。

        (3):访问修饰符和返回值类型可以相同也可以不同。

 重写发生在父类子类之间,比如所有类都是继承与Object类的,Object类中本身就有equals,hashcode,toString方法等.在任意子类中定义了重名和同样的参数列表就构成方法重写.

重写(override):一般都是表示子类和父类之间的关系,其主要的特征是:方法名相同,参数相同,但是具体的实现不同。

重写的特征:

(1):方法名必须相同,返回值类型必须相同

(2):参数列表必须相同

(3):访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。

(4):子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。

(5):构造方法不能被重写,

三、 多态

1. 概念

多态是同一个行为具有多个不同表现形式或形态的能力。

2. 使用多态

2.1 函数传入的形参可以是父亲类型,而实际传入的可以是子类对象

2.2 函数的返回类型是父亲类型,而实际返回的可以是子类对象。

3. 父类与子类之间的转换

3.1 子类类型对象转换成父类类型

根据多态原理,子类对象无需转换就可赋值给父类使用,示例如下:

Dialog dialog=new FontDialog;

 3.2 父类类型对象转换成子类类型

实例如下:

Dialog dialog=new FontDialog();
FontDialog fd=(FontDialog)dialog;

四、 抽象类和接口

1. 抽象类

        含有抽象函数的类称为抽象类,抽象类必须用abstract修饰。

注意:

  • 抽象类不能被实例化。
  • 抽象函数必须被重写,除非子类也是抽象类。

  • 在抽象类中可以含有普通成员函数。

2. 接口(Interface)

2.1 概念

接口在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。

一个类通过继承接口的方式,从而来继承接口的抽象方法。

2.2 接口的声明

格式如下:

interface 接口名称 [extends 其他的接口名] {
        // 声明变量
        // 抽象方法
}

2.3 接口的特性

①接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。

②接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。

③ 接口中的方法都是公有的。

2.4 接口的实现

 类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。

语法如下:

class 类名 implements 接口名称{ }

说明:

  • 接口中的方法不需要专门指明 abstract ,系统默认其为抽象函数,在接口中只能包含常量和函数。
  • 接口中的成员函数默认都是 public 访问类型,成员变量默认是用public static final 标识的,所以接口中定义的变量是全局静态常量。
  • 接口可以通过 extends 继承另一个接口,类通过关键字 implements 来实现一个接口。 

五、 其他

1. 关键字final

用法:

①用final修饰一个类,例:final class FontDialog;

②用final修饰一个函数;

③用final修饰一个成员变量,该成员变量的值不允许被改变,即不允许重新赋值,因此一般用关键字final来定义一个常量。

2. Object类

        在java中定义一个类时,,如果没有用extends明确标明直接父类,那么该类默认继承Object类,因此Object类是所有类的父亲。

        在Object类中,常用toStringequals两个方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lesret

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值