继承是面向对象的三大特征之一。可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法
继承的格式:public class 子类名 extends父类名{}
public class Zi extends Fu{}
父类也被称为基类、超类
子类也被称为派生类
继承的好处和弊端
继承的好处
提高了代码的复用性(多个类相同的成员可以放在同一个类中)
提高了代码的维护性(如果方法的代码需要改,修改父类中的方法即可)
继承的坏处
类与类之间产生了关系,提高了耦合性,父类变化子类也不得不变化,削弱了子类的独立性
什么时候使用继承
继承关系的体现(什么是什么的一种,大集合包含小集合,比如老虎可以继承动物类,因为老虎属于动物)
继承中变量访问的特点
在子类方法中访问一个变量
子类局部范围找
子类成员范围找
父类成员范围找
没有就会报错
super关键字
和this关键字用法相似
this:代表本类对象的引用
super:代表父类存储空间的标识(可以理解为父类对象的引用)
继承中构造方法的访问特点
1、子类中所有的构造方法默认都会访问父类中无参的构造方法。
因为子类会继承父类中的数据,可能还会使用父类的数据。所以子类初始化前,一定先完成父类数据的初始化(访问父类的构造方法就是为了使得父类数据初始化)
每一个子类构造方法的第一条语句默认都是:super()
如果父类中没有无参构造方法,只有带参构造方法
通过使用super关键字去显式的调用父类的带参构造方法
在父类中自己提供一个无参调用方法
继承中成员方法的访问特点
通过子类对象访问一个方法
先在子类范围找,然后在父类范围找,如果都没有就报错(不考虑父亲的父亲)
1、8方法重写
方法重写概述:
子类中出现了和父类一模一样的方法声明
应用:当子类需要父类的功能,而功能主体子类有自己的特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。
@Override
是一个注解(注解后面会学习到)
可以帮助我们检查重写方法的方法声明的正确性
方法重写的注意事项:
父类中的私有方法,子类不能继承,所以也不能重写
如果没有写访问权限,默认是default
子类访问父类时,权限不能比父类的高
Java中不能同时继承多个类,但是可以多层继承,一层套一层
访问权限
1、private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
2、default:即不加任何访问修饰符,通常称为“默认访问权限“或者“包访问权限”。该模式下,只允许在同一个包中进行访问。
3、protected: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护访问权限”。被其修饰的属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
4、public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包访问。
权限 | 类内 | 同包 | 不同包子类 | 不同包非子类 |
---|---|---|---|---|
private | √ | × | × | × |
default(不写) | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | √ |
修饰符
包
包就是文件夹,不同的包下可以放同名的文件,对类进行分类管理
src com 下
包的定义格式
格式:packpage包名;(多级包分开用)
package com.it(二级包)
可以用cmd命令编译并且执行一个代码,从中理解包和文件夹的关系,以及不同包下为什么可以出现相同的命名
导包
使用不同包下的类时,使用的时候要写类的全路径,写起来太麻烦
为了简化带包操作,java提供了导包功能
import包名;
修饰符
权限修饰符
上表有
状态修饰符
final(最终态)
关键字是终的意思,可以修饰成员方法,成员变量,类
final关键字声明类可以把类定义为不能继承的,即最终类;
也可以用于修饰**方法,**该方法不能被子类重写;
也可以用于修饰变量,表明该变量是常量,不能再次被赋值;
被声明为final类的方法自动的声明为final,但是实例变量并不是final
final修饰局部变量
当变量是基本类型:final修饰指的是基本类型的数据值不能发生改变
当变量是引用类型:final修饰指的是引用类型的地址值不能发生改变,但是地址值的内容可以发生改变.
例如:final int age=20;属于数据值不能发生改变
final Student s=new Student();属于地址值,内容可以变,值不能变
static(静态)
可以修饰成员方法,成员变量
特点:
static修饰的特点:被类的所有对象共享
这也是我们判断是否适用静态变量关键字的条件
可以通过类名调用,也可以通过对象名调用(推荐适用类名调用)
直接写类名然后定义这个静态变量的值是多少
访问特点:
静态成员方法只能访问静态成员;
非静态成员方法可以访问所有;