继承:
意义:让类于类之间产生父类于子类的关系,子类可以直接使用父类中的非私有成员(包括方法与成员变量) 。
extends关键字就是定义声明父类。
格式:public class 子类 extends 父类。
对于基础的我就不赘述了,我们直接讲一些实用一点的操作。
super关键字:
举个例子
class Fu{
int num=10;
}
class Zi extends Fu
{
int num=20;
public void Fuc(){
System.out.println(num);
}
}
public static void main(String[] args) {
Zi z1=new Zi();
z1.Fuc();
}
这里面的主方法会打印什么呢?
如果我们想打印父类里的10我们需要用到super
结果就会变为10
可见super可以用来区分父子类里面的相同成员。
方法重写:
这里的方法重写与方法重载不一样哟!
当字父子类出现完全一摸一样的方法时, 在创建子类对象调用方法时会优先调用子类的方法的逻辑。这其实就是子类的方法对父类的方法进行了方法重写。且我们通过@override识别方法重写。
如:父子类都有Fuc方法
class Fu{
int num=10;
public void Fuc()
{
System.out.println("666");
}
}
class Zi extends Fu
{
int num=20;
@Override//如果这没报错就是方法重写
public void Fuc(){
System.out.println(555);
}
}
public static void main(String[] args) {
Zi z1=new Zi();
z1.Fuc();
}
打印的是555
那我们怎么调用到父类的方法呢,就是用super
class Zi extends Fu
{
int num=20;
@Override
public void Fuc(){
super.Fuc();
System.out.println(555);
}
}
两个方法都打印了。
其实方法重写作用就是我们对父类方法的修改和增强。
tip:私有的父类不能重写,子类在重写时访问权限一定要大于等于父类的方法。
继承特点:
Java继承只支持单继承,不支持多继承,但支持多层继承。
单继承,多继承:就是只能继承一个父类,不能继承多个类。
多层继承就像这个图一样:
继承构造方法:
构造方法不支持继承,所以构造方法需要自己写,子类在初始化之前需要对父类进行初始化,而且所有的类构造方法中有隐藏了一句supper()代码,这是用来调用父类的无参构造。
我们先简单理解一下super();
class Fu{
int a;
int b;
public Fu() {
}
}
class Zi extends Fu
{
int c;
int d;
public Zi() {
}
public void Func()
{
System.out.println(""+a+b+c+d);
}
}
public static void main(String[] args) {
Zi z1=new Zi();
z1.Func();
}
这次会打印什么呢?
可见他将abcd全部都初始化了,就证明了调用了子父类的无参构造。
那为什么说所有类都有super()呢?
其实所有的类,直接或间接的继承了object类,这里不多说,但是可以证明的是每个类都有除本身外其他的一些方法如:
final关键字:
对于final关键字其实就感觉像是c/c++里的const
特性:
1.修饰方法就表明是最终方法,该方法不能被重写。
2.修饰类就表明是最终类,该类不能被继承。
3.修饰变量说明是常量,不能再次被赋值(类似于const修饰的变量)。
tip:final修饰成员变量时不能被修饰默认值,说明就被修饰的变量一定要初始化,要么直接声明定义在一起,要么在构造方法里初始化。
final修饰的规范:全用大写,用下划线来分割单词如:MAX_NUM