继承语法
继承是是所有OOP语言(面向对象)中不可缺少的组成部分,当创建出一个类时,他总是在继承,除非明确指出要从其他类进行继承,否则总是会对对象类进行继承。继承时提高代码重复可以用的一种重要方式,可以重复利用已有的类。
类的继承
首先创建一个基类Bird1,在创建一子类Gugu
public class Gugu extends Bird1{
public static void main(String[] args){
Gugu g = new Gugu();
g.age(3);
System.out.println(g.getAge());
g.say();
g.fly();
}
}
class Bird1{
private int age;
Bird1(){
System.out.println("Bird");
}
void fly(){
System.out.println("fly");
}
void say(){
System.out.println("Im bird");
}
void age(int a){
this.age = this.age+a;
}
public int getAge() {
return age;
}
}
/*
* Bird
* 3
* Im bird
* fly
*/
为了继承,一般的规则是将所有数据都指定为私有,并将方法指定为公共。
其中也会遇到子类继承父类方法,但想输出不同的内容,这该怎么办?此时就会用到Override(重写)对其方法进行覆盖。
方法重写
定义
- 在子类中可以根据需要对从父类中继承来的方法进行改造,也称方法的重置、覆盖。在程序执行时,子类的方法将覆盖父类的方法。
要求
- 重写方法必须和被重写方法具有相同的方法名称、参数列表和返回值类型。
- 重写方法不能使用比被重写方法更严格的访问权限。
- 重写和被重写的方法须同时为static的,或同时为非static的
- 子类方法抛出的异常不能大于父类被重写方法的异常
重写与重载的区别
- 方法覆盖出现的前提条件之一是必须有继承发生的情况下,而且要求父类和子类中的方法必须同原型;
- 方法重载时,继承并不是必需的,它只要求方法名称相同,而参数列表则必须不同,换言之,各方法的原型其实是不同的。
public class Gugu extends Bird1{
protected void say(){
System.out.println("gugugu"); //此处重写say()方法
}
void sing(){
System.out.println("sing");//此处为子类新增的自己的方法
}
public static void main(String[] args){
Gugu gugu = new Gugu();
gugu.say();
gugu.sing();
gugu.age(3);
System.out.println(gugu.getAge());
}
}
class Bird1{
private int age;
Bird1(){
System.out.println("Bird");
}
void fly(){
System.out.println("fly");
}
protected void say(){
System.out.println("Im bird");
}
void age(int a){
this.age = this.age+a;
}
public int getAge() {
return age;
}
}
/*out
*Bird
*gugugu
*sing
*3
*/
初始化基类
同过下列代码调试运行,你可以发现构建过程是从从子类一级一级向父类查找最后一集一集向子类初始化,即使你不为Cartonn()创建构造器,编译器也会默认为你合成一个构造器来调用父类构造器。
如果的带有英文参数的构造器就必须要用超显示的关系关系编写调用基类构造器,需要并且配上适当的参数。
我们可以看看书中的代码
class Game {
Game(int i) {
System.out.println("Game constructor");
}
}
class BoardGame extends Game {
BoardGame(int i) {
super(i);
System.out.println("BoardGame constructor");
}
}
public class Chess extends BoardGame {
Chess() {
super(11);
System.out.println("Chess constructor");
}
public static void main(String[] args) {
Chess x = new Chess();
}
} /* Output:
Game constructor
BoardGame constructor
Chess constructor
*/