Java学习笔记(继承、接口和泛型)

本文详细探讨了Java中的继承概念,包括子类和父类的继承性,成员变量隐藏和方法重写,以及super关键字的使用。接着介绍了抽象类和接口的区别,强调了面向抽象编程的重要性。此外,还详细讲解了接口的声明、使用和多态,以及接口回调和泛型类的声明与实现。最后,文章对比了抽象类与接口,并讨论了内部类和匿名类的应用。
摘要由CSDN通过智能技术生成

子类和父类

继承是一种根据已有类创建新类的机制,利用继承可以先创建一个共有属性的一般类,根据一般类再创建具有特殊属性的新类,新类继承一般类的状态和行为,并且根据需要增加自己新的状态和行为。由继承而得到的类称为子类,被继承的称为父类(超类),父类可以是自己编写的类,也可以是Java类库的类。Java不支持多重继承,即子类只能有一个父类。
在类的声明中,使用关键字extends来声明一个类是另一个类的子类格式如下:
class 子类名 extends 父类名{

}
如果一个类的声明中没有使用关键字extends,这个类被系统默认是Object的子类。

子类的继承性

1.继承的定义

子类的成员一部分是子类是自己声明定义的,另一部分是从它的父类继承的。子类继承的成员变量作为自己的一个成员变量,可以被子类中自己声明的任何实例方法操作。子类继承父类的方法作为子类的一个方法,就像是在子类中直接声明的,可以被子类中自己声明的任何实例方法调用。

2.子类和父类在同一包中的继承性

如果子类和父类在一个包中,那么子类自然的继承了其父亲中不是private的成员变量作为自己的成员变量,也自然的继承了父类中不是private方法作为自己的方法,继承的成员变量以及方法的访问权限保持不变。
例:在这里插入图片描述

3.子类和父类不在同一包中的继承性

如果子类和父类不在同一个包中,那么子类继承了父类的protected、public成员变量作为子类的成员变量,并且继承了父类的protected和public方法,继承的成员或方法的访问权限保持不变,但子类不能继承父类友好变量和友好方法。

子类对象的构造过程

当用子类的构造方法创建一个子类的对象时,子类的构造方法总是先调用父类的某个构造方法,如果子类没有明确地指明父类的哪个构造方法,子类就调用父类不带参数的构造方法。
子类创建的对象:1…将子类中声明的成员变量作为子类对象的成员变量 。2.父类的成员变量也都分配内存空间,但只将其中一部分作为子类对象的成员变量。

成员变量隐藏和方法重写

1.成员变量的隐藏

子类可以隐藏继承的成员变量。在子类中定义的成员变量和父类中的成员变量同名,则子类的成员变量隐藏了继承的成员变量,即子类重新定义了这个成员变量。
注意:尽管子类可以隐藏从父类继承的成员变量,但是子类仍然可以通过使用父类继承的方法操作被隐藏的成员变量。例:
在这里插入图片描述
在这里插入图片描述

2.方法重写

子类可以隐藏已继承的方法,子类可以通过方法重写来隐藏继承的方法。方法重写是指:子类中定义一个方法,并且这个方法的名字、返回类型、参数个数与从父类继承的方法完全相同。如果父类的方法可以被子类继承,子类就有权力重写重写,一般子类重写了父类的方法。如果子类想要使用被隐藏的方法必须使用关键字super。例:
在这里插入图片描述
在这里插入图片描述
注:方法重写一定要保证方法的名字、类型、参数个数和类型同父类的摸个方法完全相同,只有这样子类继承的这个方法才能完全被隐藏。如果具有相同的名字,但没有保证方法的类型不同,程序就会出现编译错误,如果子类在准备隐藏继承的方法时参数个数或参数类型不尽相同时,子类就会出现方法重载。重写父类的方法时,不可以降低方法的访问权限。

3.访问修饰符protected的进一步说明

一个类A中的protected成员变量和方法可以被它的直接子类和间接子类继承,如B是A的子类,C是B的子类,D是C的子类,那么类B、C、D都继承了A的protected成员变量,如果在另一个类中Other,用类D创建了一个对象object,子类D的protected成员变量和方法如果不是从父类继承来的,对象访问这些protected成员变量和方法时,只有Other与D在同一个包中就可以,如果类D的protected成员变量和方法时从父类继承来的,就要追溯到D的祖先类,如果类A和Other在同一个包中,object对象就能访问继承的protected变量和protected方法。

关键字super

关键字super有两种用法:一种是子类使用super调用父类的构造方法,另一种是子类使用super调用子类隐藏的成员变量和方法。

1.使用super调用父类的构造方法

子类不继承父类的构造方法,因此子类想要继承父类的构造方法,子类就必须在子类的构造方法中使用super切必须使用super来表示,而且super必须是子类构造方法的第一条语句,如果子类的构造方法没有明显的指明使用父类的哪个构造方法,子类会默认继承父类

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值