java中父类方法return this.对象还是变量,子类去调用this.这个方法的问题

简介: 本文探讨了在Java中,当父类的方法返回`this`对象或变量时,子类调用该方法的行为,以及`this`关键字在不同类中调用方法时的指向问题。

这个问题很简单

public class this_test01 {
    public static void main(String[] args) {
        zi j=new zi();
        j.pri();
    }
}

class zi extends fu{
    int i=this.getnum();
    void pri(){
        System.out.println(i);
    }
}

class  fu {
    int num=1;
 int   getnum(){
        return this.num;
    }
}

返回结果是1,如果运用到对象身上就是

public class this_test01 {
    public static void main(String[] args) {
        zi j=new zi();
        Main m=new Main();
        j.pri();
        j.getnum1();
    }
}

class zi extends fu{
    Main i=this.getnum();
    void pri(){
        System.out.println(i);
    }
}
class  fu {
    Main num=new Main();
    void getnum1(){
        System.out.println(num);
    }
 Main   getnum(){
        return this.num;
    }
}

创建的对象就是父类的对象,由此可知调用方法里面有this,就要看这个方法是在哪个类上面,用本类this去调用方法里面返回的this。

这种写法非常奇妙,可以说是一个子类就对应一个fu类的外部Main类的对象

public class this_test01 {
    public static void main(String[] args) {
        zi j=new zi();
        zi1 k=new zi1();
        j.pri();
        j.getnum1();
        k.pri();
    }
}

class zi extends fu{
    Main i=this.getnum();
    void pri(){
        System.out.println(i);
    }
}
class zi1 extends fu{
    Main i=this.getnum();
    void pri(){
        System.out.println(i);
    }
}

class  fu {
    Main num=new Main();
    void getnum1(){
        System.out.println(num);
    }
 Main   getnum(){
        return this.num;
    }
}

但是仔细想想也不算什么,因为创建子类对象时,它会执行父类的初始化,自动new了一个Main对象,不同子类的Main对象完全不同。(除非父类不是采用new Main的形式)。

目录
相关文章
|
18天前
|
Java 程序员 容器
Java中的变量和常量:数据的‘小盒子’和‘铁盒子’有啥不一样?
在Java中,变量是一个可以随时改变的数据容器,类似于一个可以反复打开的小盒子。定义变量时需指定数据类型和名称。例如:`int age = 25;` 表示定义一个整数类型的变量 `age`,初始值为25。 常量则是不可改变的数据容器,类似于一个锁死的铁盒子,定义时使用 `final` 关键字。例如:`final int MAX_SPEED = 120;` 表示定义一个名为 `MAX_SPEED` 的常量,值为120,且不能修改。 变量和常量的主要区别在于变量的数据可以随时修改,而常量的数据一旦确定就不能改变。常量主要用于防止意外修改、提高代码可读性和便于维护。
|
26天前
|
Java 编译器
Java重复定义变量详解
这段对话讨论了Java中变量作用域和重复定义的问题。学生提问为何不能重复定义变量导致编译错误,老师通过多个示例解释了编译器如何区分不同作用域内的变量,包括局部变量、成员变量和静态变量,并说明了使用`this`关键字和类名来区分变量的方法。最终,学生理解了编译器在逻辑层面检查变量定义的问题。
Java重复定义变量详解
|
4天前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
14 1
|
22天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
76 4
|
2月前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
48 17
|
26天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
72 2
|
2月前
|
Java 开发者
在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口
【10月更文挑战第20天】在Java多线程编程中,创建线程的方法有两种:继承Thread类和实现Runnable接口。本文揭示了这两种方式的微妙差异和潜在陷阱,帮助你更好地理解和选择适合项目需求的线程创建方式。
20 3
|
2月前
|
存储 Java
[Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
本文介绍了Java中`try...catch...finally`语句的使用细节及返回值问题,并探讨了JDK1.7引入的`try...with...resources`新特性,强调了异常处理机制及资源自动关闭的优势。
23 1
|
2月前
|
Java
通过Java代码解释成员变量(实例变量)和局部变量的区别
本文通过一个Java示例,详细解释了成员变量(实例变量)和局部变量的区别。成员变量属于类的一部分,每个对象有独立的副本;局部变量则在方法或代码块内部声明,作用范围仅限于此。示例代码展示了如何在类中声明和使用这两种变量。
|
2月前
|
Java 开发者
在Java多线程编程中,选择合适的线程创建方法至关重要
【10月更文挑战第20天】在Java多线程编程中,选择合适的线程创建方法至关重要。本文通过案例分析,探讨了继承Thread类和实现Runnable接口两种方法的优缺点及适用场景,帮助开发者做出明智的选择。
19 2