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的形式)。

目录
相关文章
|
26天前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
1月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
68 9
|
24天前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
37 4
|
24天前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
25 4
|
22天前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
25 1
|
1月前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
114 4
|
1月前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
161 2
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
1月前
|
Java Spring
JAVA获取重定向地址URL的两种方法
【10月更文挑战第17天】本文介绍了两种在Java中获取HTTP响应头中的Location字段的方法:一种是使用HttpURLConnection,另一种是使用Spring的RestTemplate。通过设置连接超时和禁用自动重定向,确保请求按预期执行。此外,还提供了一个自定义的`NoRedirectSimpleClientHttpRequestFactory`类,用于禁用RestTemplate的自动重定向功能。
下一篇
DataWorks