Discover best selling sofas, Lounge chairs and get an extra 10% off using the code SEDONA10

构造函数部分

在Java当中,构造函数不能继承,但是会调用,C继承于B,B继承于A,那么当你new一个C的时候,假设用的默认构造函数,那么就会分别调用B和A的默认构造函数。


比如A的默认构造函数里有System.out.println(“it’s A”);B的构造函数里有System.out.println(“it’s B”);那么当你new一个C,终端上会同时输出it’A和it’B,如果C的默认构造函数里有输出内容,也会接着输出。例如以下代码:

abstract class Animal {
    protected int weight;

    public Animal(){
        System.out.println("Animal() constructor");
    }
}

class Human extends Mammal{

    protected String name;
    protected String country;
    public Human(){
        super();
        System.out.println("it's human constructor!");
    }
}
final class martti extends Human {

    public martti(){
        System.out.println("it's martti constructor");
    }

}
public class RunClass {
    public static void main(String[] args) {
        martti mr = new martti();
        
    }
}

当我在main函数中实例化一个martti类的时候,它会同时调用Mammal和Animal的构造函数,于是终端上会输出:
Animal() constructor
it’s human constructor!
it’s martti constructor

方法重写与重载

抽象类A里面有个方法,代码如下:
protected void eat()
{
System.out.println(“Eating like an animal!”);
}

那么如果非抽象类B继承于A,B就必须实现(implement)A类里面的eat方法,实现的方法有且只有一种,那就是override.

override是指,方法名相同,参数相同(没有参数那就是都没有):
public void eat(){
System.out.println(“martti eat”);
};

方法名与父类相同,但参数不同,就属于方法的重载,也就是overload:
public void eat(String food){

    System.out.println("martti eat"+food);

}

如果我在一个方法前面加上了@override,那么这个方法就只能是重写,而不能是重载;这样是为了规划一个项目的时候,确保这个地方是重写,同时也告诉编译器,如果这个地方写成了重载(也就是改变了参数),那么就会报错。不加这个标记的话无论是重写还是重载,都是可以的。

Leave a Reply