博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA学习笔记11(类的继承、final关键字、抽象类和接口)
阅读量:3932 次
发布时间:2019-05-23

本文共 3439 字,大约阅读时间需要 11 分钟。

一、类的继承

1、继承的概念

在现实生活中,继承一般指的是子女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物,同理,波斯猫和巴厘猫继承自猫,而沙皮狗和斑点狗继承自狗。这些动物之间会形成一个继承体系,具体如下图所示。
在这里插入图片描述
在Java中,类的继承是指在一个现有类的基础上去构建一个新的类,构建出来的新类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。在程序中,如果想声明一个类继承另一个类,需要使用extends关键字。

//定义Animal类class Animal {
String name;//定义name属性 //定义动物叫的方法 void shout() {
System.out.println("动物发出叫声"); }}//定义dog类继承Animal类class Dog extends Animal {
//定义一个打印name的方法 public void printlnName() {
System.out.println("name="+name); }}//定义测试类public class Example01 {
public static void main(String[] args) {
Dog dog = new Dog(); //创建一个Dog类的实例对象 dog.name = "沙皮狗"; //为Dog类的实例对象 dog.printName(); //调用dog类的getInfo()方法 dog.shout(); //调用dog类继承来的shout()方法 }}

在这里插入图片描述

在类的继承中,需要注意一些问题,具体如下:
1.在Java中,类只支持单继承,不允许多重继承,也就是说一个类只能有一个直接父类,例如下面这种情况是不合法的。
在这里插入图片描述
2.多个类可以继承一个父类,例如下面这种情况是允许的。
在这里插入图片描述
3.在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类,例如C类继承自B类,而B类又可以去继承A类,这时,C类也可称作A类的子类。例如下面这种情况是允许的。
在这里插入图片描述
4.在Java中,子类和父类是一种相对概念,也就是说一个类是某个类父类的同时,也可以是另一个类的子类。例如上面的示例中,B类是A类的子类,同时又是C类的父类。

2、重写父类方法

在继承关系中,子类会自动继承父类中定义的方法,但有时在子类中需要对继承的方法进行一些修改,即对父类的方法进行重写。需要注意的是,在子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。
文件4-1中,Dog类从Animal类继承了shout()方法,该方法在被调用时会打印“动物发出叫声”,这明显不能描述一种具体动物的叫声,Dog类对象表示犬类,发出的叫声应该是“汪汪汪”。

//定义Animal类class Animal {
//定义动物叫的方法 void shout() {
System.out.println("动物发出叫声"); }}//定义Dog类继承动物类class Dog extends Animal {
//定义狗叫的方法 void shout() {
System.out.println("汪汪汪......"); } }//定义测试类public class Example02 {
public static void main(String[] args) {
Dog dog = new Dog(); //创建Dog类的实例对象 dog.shout(); //调用dog重写的shout()方法 }}

在这里插入图片描述

文件中,定义了Dog类并且继承自Animal类。在子类Dog中定义了一个shout()方法对父类的方法进行重写。从运行结果可以看出,在调用Dog类对象的shout()方法时,只会调用子类重写的该方法,并不会调用父类的shout()方法。

3.super关键字

当子类重写父类的方法后,子类对象将无法访问父类被重写的方法,为了解决这个问题,在Java中专门提供了一个super关键字用于访问父类的成员。例如访问父类的成员变量、成员方法和构造方法。接下来分两种情况来学习一下super关键字的具体用法。

1.使用super关键字访问父类的成员变量和成员方法。具体格式如下:
在这里插入图片描述2.使用super关键字访问父类的构造方法。具体格式如下:在这里插入图片描述

二、final关键字

1、final关键字的概念

final关键字可用于修饰类、变量和方法,它有“无法改变”或者“最终”的含义,因此被final修饰的类、变量和方法将具有以下特性:
final修饰的类不能被继承。
final修饰的方法不能被子类重写。
final修饰的变量(成员变量和局部变量)是常量,只能赋值一次。

2、final关键字修饰类

Java中的类被final关键字修饰后,该类将不可以被继承,也就是不能够派生子类。

3、final关键字修饰方法

当一个类的方法被final关键字修饰后,这个类的子类将不能重写该方法。

4、final关键字修饰变量

Java中被final修饰的变量称为常量,它只能被赋值一次,也就是说final修饰的变量一旦被赋值,其值不能改变。如果再次对该变量进行赋值,则程序会在编译时报错。

三、 抽象类和接口

1、抽象类

当定义一个类时,常常需要定义一些方法来描述该类的行为特征,但有时这些方法的实现方式是无法确定的。例如前面在定义Animal类时,shout()方法用于表示动物的叫声,但是针对不同的动物,叫声也是不同的,因此在shout()方法中无法准确描述动物的叫声。
针对上面描述的情况,Java允许在定义方法时不写方法体,不包含方法体的方法为抽象方法,抽象方法必须使用abstract关键字来修饰,具体示例如下:在这里插入图片描述当一个类中包含了抽象方法,该类必须使用abstract关键字来修饰,使用abstract关键字修饰的类为抽象类,具体示例如下:在这里插入图片描述在定义抽象类时需要注意,包含抽象方法的类必须声明为抽象类,但抽象类可以不包含任何抽象方法,只需使用abstract关键字来修饰即可。另外,抽象类是不可以被实例化的,因为抽象类中有可能包含抽象方法,抽象方法是没有方法体的,不可以被调用。如果想调用抽象类中定义的方法,则需要创建一个子类,在子类中将抽象类中的抽象方法进行实现。

2、接口

如果一个抽象类中的所有方法都是抽象的,则可以将这个类用另外一种方式来定义,即接口。接口是由常量和抽象方法组成的特殊类,是对抽象类的进一步抽象。

在定义接口时,需要使用interface关键字来声明,其语法格式如下:在这里插入图片描述在上面的语法中,一个接口可以有多个父接口,他们之间用逗号隔开。Java使用接口的目的是为了克服单继承的限制,因为一个类只能有一个父类,而一个类可以实现多个接口。接口中的变量默认使用“public static final”来修饰,即全局常量;接口中定义的方法默认使用“public abstract”来修饰,即抽象方法。如果接口声明为public,则接口中的变量和方法全部为public。
由于接口中的方法都是抽象方法,因此不能通过实例化对象的方式来调用接口中的方法。此时需要定义一个类,并使用implements关键字实现接口中所有的方法。一个类可以在继承的同时实现多个接口,在implements子句中用逗号隔开。接口的实现类声明格式如下:
在这里插入图片描述为了加深初学者对接口的认识,接下来对接口的特点进行归纳,具体如下:
接口中的方法都是抽象的,不能实例化对象。
接口中的属性只能是常量。
当一个类实现接口时,如果这个类是抽象类,则实现接口中的部分方法即可,否则需要实现接口中的所有方法。
一个类通过implements关键字实现接口时,可以实现多个接口,被实现的多个接口之间要用逗号隔开。具体示例如下:在这里插入图片描述一个接口可以通过extends关键字继承多个接口,接口之间用逗号隔开。具体示例如下:在这里插入图片描述一个类在继承另一个类的同时还可以实现接口,此时,extends关键字必须位于implements关键字之前。具体示例如下:在这里插入图片描述

转载地址:http://rktgn.baihongyu.com/

你可能感兴趣的文章
递归与分治策略
查看>>
动态规划策略
查看>>
项目的生命周期
查看>>
项目干系人
查看>>
组织的影响
查看>>
贪心算法
查看>>
项目管理过程
查看>>
项目管理过程组
查看>>
项目可行性的研究内容
查看>>
初步可行性研究
查看>>
详细可行性研究
查看>>
收益的预测和评估
查看>>
项目论证
查看>>
项目评估
查看>>
回溯法
查看>>
分支限界法
查看>>
随机化算法
查看>>
项目整体管理(一)
查看>>
项目整体管理(二)
查看>>
推荐阅读书籍
查看>>