java基础之继承:super关键字、构造方法、方法重写

 我们先简单罗列继承的相关知识点:

-  关键字:extends

-  格式:public class 子类名 extends 父类{}

-  1. 继承的属性和方法:子类可以直接继承到父类的成员属性和成员方法(构造方法不能被继承)

       思考:子类继承父类方法后,方法写成什么样子?

       先看下面两段简单的代码,A是B的父类,B可以继承A的成员方法。

public class A {
    int age=18;
    
    void test(){
        System.out.println(age);
    } 
}
public class B extends A{
    int age=22;
}

       那么问题来了,B继承A类方法,方法体内部要怎么写呢?

    void test(){
        System.out.println(age);
    }
    void test() {
        super.test();
    }

       正确答案是下面这个哦!

-  2. 构造方法:子类构造方法必须调用父类的构造方法。并且要在子类构造方法的第一行调用。格式为super(参数列表).

       a.自己在每个子类的构造方法中老老实实地显式调用父类构造方法

       b.没有显式调用父类构造方法,则编译器会在子类的构造函数第一行为我们添加super(),即替我们添加了调用父类的无参构造方法。如果自己调用的话则不会为我们做任何事情。

       c.使用this关键字在某个构造方法的第一行调用了其他构造方法,而其他构造方法调用了父类的构造方法,那也是可以的。

       为方便理解,我们举个例子:

public class Son extends Father{

    //第一个构造方法没有显式调用父类构造方法
    Son(){}

    //第二个构造方法显式调用父类构造方法
    Son(int year){
        super("na");
    }

    //第三个构造方法通过this关键字满足了调用父类构造方法的条件
    Son(Float a){
        this(23);
    }

}
public class Father {

    Father(){
        System.out.println("父类");
    }

    Father(String n){}
}

-  3. 方法重写:

       (1)在子类中重新定义父类的方法,必须和父类的方法同名同参,且方法的返回值类型都相同

       (2)子类可以重写父类的方法并修改方法体,但不能修改方法结构

       (3)子类重写父类方法后,子类对象调用时调用的是重写后的方法,不能再调用重写前的方法;这是因为修改子类方法后,它覆盖了父类的方法,这个过程叫override;

-  4. 成员变量重写

       子类中假如有一个与父类同名的属性,那么这个同名的属性不会覆盖继承的属性,也不会冲突,它属于一个隐藏属性变量。

       举个例子:

public class A {
    int age = 10;
    void test() {System.out.println("test--A" + age);}
}

public class B extends A {
    int age = 12;
    void test(){System.out.println("test--B" + age);}
}


public class Entrance {
    public static void main(String[] args) {
        A a = new B();
        System.out.println(a.age);
        a.test();
    }
}

       结果如下:

10
test--B12

-  5. super关键字

      (1)用在子类的构造方法中,表示对父类构造方法的调用,格式:  super+(参数列表);

      (2)用在子类的成员方法中,表示对父类成员方法的调用,格式:  super.方法名字(参数列表);

-  6. 注意:

      (1)java不支持直接多重继承,一个子类只能有一个父类。

       class 子类 extends 父类1,父类2{}     ×(但这种写法在c++中是支持的)

      (2)java可以有间接的多重继承,比如A继承了B,B继承了C,此时相当于A间接地继承了C。

      (3)也就是说,一个类只能有一个直接父类,但可能有多个间接父类。


版权声明:本文为weixin_50757957原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。