子类和父类中定义了一模一样的方法
在类中的构造和一般的方法中在没有继承关系时都有一个默认的this (用于找到当前的对象),在建立了继承关系后,在子类中有一个super :指向父类的引用(标志这两个类之间的关系)
找方法也和变量一样先在对象中找,,没有再去父类中找
class Fu{
int num=3;
void show(){
System.out.println("fu is running!");
}
}
class Zi extends Fu{
int num=4;
void show(){
System.out.println("zi is running!");
}
}
public class extendsBasic {
public static void main(String[] args){
Zi z=new Zi();
z.show();
}
}
运行结果:
zi is running! //运行结果是子类中的方法运行
这种情叫重写(复写 方法覆盖)
常见情况
1.当父类和子类有一致函数,应该遵从,子类继承父类,父类已经具备这个功能那么子类就已经继承这个功能了
2.当子类继承父类的这个功能但具体的执行却和父类不太一样(要对这个功能进行更改)————方法覆盖
override(重写 复写 方法覆盖)
是函数的另一个特性(一个特性为重载 overload)
例子:描述手机——
class phone{
void call(){}
void show(){//来电显示
System.out.println("电话号码");
}
}
对来电显示功能进行优化,不仅现实电话号码,还要显示姓名,照片
一般不会直接修改原始代码——原始代码类与类之间,程序之间关系复杂,直接修改原始代码可能会牵一发而动全身因此解决办法————对原始代码进行扩展(继承),在子类中改写相应功能
class phone{
void call(){}
void show(){//来电显示
System.out.println("电话号码");
}
}
class Newphone extends phone{
void show(){
super.show();//如果还需要父类中的功能用super 关键字
System.out.println("显示电话号码");//不需要就可以直接写新的功能
System.out.println("显示照片");
}
对原始代码进行扩展(继承),在子类中改写相应功能
1.函数名与父类一致,如果还需要父类方法就用super,不需要就直接定义在这个功能中的运行
重写的注意事项
1.子类覆盖父类,必须要保证前者的的权限(public private 默认)必须要大于或者等于后者
私有不放在覆盖范围之内
(关于关键字:public private 为权限修饰符只限制访问,不改变存储/static 会改变储存)
2.静态覆盖静态
3.写法要一摸一样:返回值 函数名 参数列表
注意:在子类中使用父类中的方法(与父类一模一样/不重写)
函数()
{
super.函数名();
}
这样过调用的函数是完全调用的父类中的执行