继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。
继承的格式:public class 子类名 extends 父类名{}
范例:public class Zi extends Fu{}
说明:Fu是父类,也称为基类、超类;Zi是子类,也称为派生类。
继承中子类的特点:子类既可以有父类的内容也可以有自己特有的内容。
继承的好处:
1.提高代码的复用性(多个类相同的成员可以放到一个类中)
2.提高代码的维护性(如果方法需要修改只要修改一处即可)
继承的弊端:让类与类之间产生了关系,类的耦合性增强了,当父类变化时子类的实现不得不跟着改变,削弱了子类的独立性。
什么时候使用继承?
继承体现的关系:is a
假设法:两个类A和B,若满足A是B的一种或者B是A的一种,就说明存在继承关系,可以使用继承,否则不能使用继承。
范例:苹果和水果(√),猫和动物(√),猫和狗(×)
通过子类对象访问一个变量,首先在子类局部范围中找,然后在子类成员变量中找,最后在父类的成员变量中找,若找不到就报错,不考虑父亲的父亲。
this:代表本类对象的引用
super:代表父类存储空间的标识(可以理解为父类对象的引用 )
子类中所有构造方法默认都会访问父类中的无参构造方法,因为子类会继承父类中的数据,可能还会使用到父类中的数据,所以子类初始化之前,一定要先完成父类数据的初始化,而且每个子类构造方法的第一句都是:super()。
若父类中没有无参构造方法,只有带参构造方法,那么要么通过super关键字显示的调用父类的带参构造方法,要么手动给出无参构造方法(推荐自己给出无参构造方法)。
通过子类对象访问一个方法,首先在子类成员部范围中找,然后在在父类的成员范围中找,若找不到就报错,不考虑父亲的父亲。
1.概述:子类中出现了和父类中一模一样的方法声明。
2.应用:当子类需要父类的功能,而功能主体有自己特有内容时,可以重写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容。
注意:@override是一个注解,可以帮助我们检验重写方法的正确性。
3.注意事项:私有方法不能被重写(父类的私有成员子类不能继承);子类方法访问权限不能更低(public>默认>private)。
Java中类中支持单继承,不支持多继承,但是可以多层继承。子类中使用父类的带参构造方法时,需要手动调用父类的带参构造,并且在写了带参构造方法后需要手动给出无参构造方法。
包其实就是文件夹,为了方便对类进行管理。
包的定义格式:package 包名;(多级包用,分开)
范例:package com.iheima;
带包的java类的编译和执行:
1)手动建包:a.按以前的方式编译java文件
b.手动建包,在对应位置建立com文件夹然后在com下建itheima文件夹
c.把.class文件放到itheima文件夹下
d.带包执行:java com.itheima.HelloWorld
2)自动建包:javac -d . HelloWorld.java(d后面有个空格,“.”后面也有个空格)
使用不同包下的类时要写类的全路径,为简化操作,可以使用导包操作。
导包格式:import 包名;
范例:import cn.itcast.Teacher;
修饰符分为权限修饰符和状态修饰符。
1)final:最终的意思,可以修饰成员方法、成员变量、类,final修饰的方法、变量和类是不可以被重写、修改和继承的;修饰基本类型变量时,数据值不能发生改变;修饰引用类型时,地址值不能发生改变,但是地址里面的内容可以改变。
2)static:静止的意思,可以修饰成员变量和成员方法。static修饰的成员变量被类的所有对象共享(这也是判断是否使用静态关键字的条件),被static修饰的成员变量可以通过类名和对象名调用,推荐使用类名。
访问特点:非静态的成员方法可以访问静态成员变量,非静态成员变量,静态成员方法,非静态成员方法;静态的成员方法可以访问静态成员变量,静态成员方法。
总结:静态成员方法只能访问静态成员。