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中如果你构造函数一个都没写,系统会有默认的函数,只调用子类自身的构造函数
但是只写了一个有参的构造函数,系统会报错
如果只写了一个无参的构造函数,没有有参的,也能运行

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
继承Java的一种重要的面向对象编程概念,它允许一个(子继承另一个(父)的属性和方法。通过继承,子可以从父获得已有的属性和方法,并且可以在此基础上进行扩展或者修改。 在Java,使用关键字"extends"来实现继承。子通过继承,可以使用父的非私有属性和方法。子可以直接访问父的公有属性和方法,也可以通过super关键字来访问父的构造方法和成员。 下面是一个简单的继承示例: ```java // 父 class Animal { private String name; public Animal(String name) { this.name = name; } public void eat() { System.out.println(name + "正在吃饭"); } } // 子 class Dog extends Animal { public Dog(String name) { super(name); } public void bark() { System.out.println("汪汪汪"); } } public class Main { public static void main(String[] args) { Dog dog = new Dog("旺财"); dog.eat(); // 调用父的eat方法 dog.bark(); // 调用子的bark方法 } } ``` 在上面的示例,Animal是父,Dog是子。Dog通过关键字"extends"继承了Animal,从而可以使用Animal的属性和方法。在main方法,我们创建了一个Dog对象,并调用了eat方法(来自父)和bark方法(来自子)。 通过继承,子可以扩展父的功能,并且可以在需要时覆盖父的方法来实现特定的行为。继承Java实现代码重用和多态性的重要手段之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值