java笔记 类的继承 继承类对象的创建

一. 子类继承父类的调用关系顺序

在java中没有多重继承
也就是说 一个子类只能继承一个父类,不能类C同时继承类A和类B
调用关系同等与C++,继承关键字extends

class text1
{
    
    
    int X, Y;

    public text1()
    {
    
    
        X = 0;
        Y = 0;
        System.out.println("无参text1");
    }

    public text1(int x, int y)
    {
    
    
        X = x;
        Y = y;
        System.out.println("有参text1");
    }

    public String toString()
    {
    
    
        return (this.X + " " + this.Y);
    }

}

class text2 extends text1
{
    
    
    int Z ;

    public text2()
    {
    
    
        int Z = 0;   /// 利用2 调用 1 的xy
        System.out.println("无参text2");
    }

    public text2(int z)
    {
    
    
        Z = z;
        System.out.println("有参text2");
    }
}
public class text
{
    
    
    public static void main(String args[])
    {
    
    
        text2 t2 = new text2();
    }
}

在text类中,我们创建一个text2,继承text1, 先调用text1的构造函数,再调用text2的构造函数
在这里插入图片描述

二.继承成员

在上面的例子中,text2只写了一个Z
如果我们给text1的X,Y赋值,再用text2的对象调用X,Y

public class text
{
    
    
    public static void main(String args[])
    {
    
    
        text1 t1 = new text1(1, 2);
        text2 t2 = new text2();
        System.out.println(t2.X + " " + t2.Y );
    }
}

在这里插入图片描述
可以看到 t1 调用了有参的构造函数
其次通过 t2 调用的X,Y都是 t2 自己继承 text1 的无参构造函数里面的X,Y
并不是 t1 赋值后的X,Y
所以t2并不能继承t1的x,y,只是有了text1中的成员属性x,y

三.调用父类的构造函数及子类调用父类的构造函数

我们现在补全text2的构造函数

public text2()
    {
    
    
        int X = 0;
        int Y = 0;
        int Z = 0;
        System.out.println("无参text2");
    }

    public text2(int x, int y, int z)
    {
    
    
    	X = x;
    	Y = y;
        Z = z;
        System.out.println("有参text2");
    }

改写主函数

public class text
{
    
    
    public static void main(String args[])
    {
    
    
        text2 t2 = new text2(2, 3, 4);
        System.out.println(t2.toString());
    }
}

在这里插入图片描述
我们又能发现,不管 t2 是有参还是无参,都会调用 text1 的无参构造函数
**使用 t2 调用 toString 函数时,打印的X,Y也是给 t2 赋值的x,y **

四. 默认构造函数 及 父类无参构造函数的重要性

主函数

public class text
{
    
    
    public static void main(String args[])
    {
    
    
        text2 t2 = new text2(2, 3, 4);
    }
}

1. 删除父类无参构造函数
在这里插入图片描述
会报错


2. 删除父类有参的构造函数

在这里插入图片描述
会正常运行


3.都删除
在这里插入图片描述
只调用text2的有参


这说明java中如果你构造函数一个都没写,系统会有默认的函数,只调用子类自身的构造函数
但是只写了一个有参的构造函数,系统会报错
如果只写了一个无参的构造函数,没有有参的,也能运行

所以以后把无参构造函数都写上

猜你喜欢

转载自blog.csdn.net/yogur_father/article/details/108704703