Java中super和this的用法详解

super 用法
super关键字用来访问父类内容,具体用法可分为三种:
1.子类的成员方法访问父类的成员变量

public class Animal {
  public int age = 10;
}

class Dog extends Animal {
  public int age = 5;

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

2.子类的成员方法访问父类的成员方法

public class Animal {
  public void fn(){
    System.out.println("父类Animal的方法");
  }
}

class Dog extends Animal {
  @Override
  public void fn() {
    super.fn();
    System.out.println("子类Dog的方法");
  }
}

3.子类的构造方法访问父类的构造方法

public class Animal {
  public Animal() {
    System.out.println("父类Animal的构造方法");
  }
}

class Dog extends Animal {
  public Dog() {
    super();
    System.out.println("子类Dog的构造方法");
  }
}

this 用法
this关键字用来访问本类内容,具体用法可分为三种:
1.本类的成员方法访问本类的成员变量

public class Dog extends Animal {
  public int age = 1;

  public void showAge() {
    int age = 3;
    System.out.println(age);
    System.out.println(this.age);
  }
}

2.本类的成员方法访问本类的另一成员方法

public class Dog extends Animal {
  public int age = 1;

  public void showAge() {
    int age = 3;
    System.out.println(age);
    System.out.println(this.age);
  }

  public void fn() {
    this.showAge();
  }
}

3.本类的构造方法访问本类的另一个构造方法,此时this(…)调用必须放在这个构造方法中的第一句,且只能使用一次

public class Dog extends Animal {
  public Dog() {
    this(2);
    System.out.println("无参构造");
  }

  public Dog(int age) {
    System.out.println(age);
    System.out.println("有参构造");
  }
}

super和this内存图解

  • 方法区中存放包含主方法的Demo、父类和子类的class对象,编译后在子类的class对象中会有一个super_class标记指向父类,表明二者的继承关系
  • 主方法进栈,执行语句new一个子类对象,栈中存放该对象的地址值,指向堆中开辟的一块用于存放该子类对象的内存,注意堆中子类对象内容还包括完整的父类结构
  • 主方法中执行子类的show方法,show方法进栈,栈中存放show方法中的局部变量num,输出局部变量num的值,接着输出this.num,this指向子类对象,this.num得到堆中子类变量num的值,最后输出super.num得到的是堆中存储的父类变量的值
  • 主方法执行子类的method方法,子类method方法进栈,子类method方法中使用super.method()调用父类的method方法,父类的method方法进栈

总结

到此这篇关于Java中super和this的用法的文章就介绍到这了,更多相关Java中super和this的用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java this super使用方法详解

    super是Java语言的保留字,用来指向类的超类. 假设在Teacher类中定义了一个类变量boolean gender; 在子类的方法中gender就应该是指子类的gender变量,如果要引用超类的gender变量的话就必须使用 super.genderthis对象在类的构造方法中,要给对象的域进行初始化,这时如果参数和类变量同名,则类变量的名字将会被参数名屏蔽, 必须知道当前的对象名称,才能用对象名引用对象的域 复制代码 代码如下: public DotLoc(double XX,doub

  • 详解Java中super的几种用法并与this的区别

    1. 子类的构造函数如果要引用super的话,必须把super放在函数的首位 复制代码 代码如下: class Base { Base() { System.out.println("Base"); } } public class Checket extends Base { Checket() { super();//调用父类的构造方法,一定要放在方法的首个语句 System.out.println("Checket"); } public static voi

  • Java this()和super()的使用注意

    Java this()和super()的使用注意 使用super和this应该注意这些: 1)调用super()必须写在子类构造方法的第一行,否则编译不通过.每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错. 2)super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法. 3)super()和this()均需放在构造方法内第一行. 4)尽管可以用this调用一个构造器,但

  • Java中的构造方法this、super的用法详解

    1.构造方法 定义:与类同名没有返回值的方法称为构造方法: public class test1 { private String name; private int age; public test1(){ } } 上面的test1()是默认构造方法,即使没有定义java虚拟机在运行的时候也会自动生成, 当然如果定义了重载的构造方法便不会自动生成: 构造方法的作用有两点1.通过构造方法建立一个对象:2.通过构造方法可以快速的赋初值: public class Main { public sta

  • 举例讲解Java编程中this关键字与super关键字的用法

    this 总要有个事物来代表类的当前对象,就像C++中的this指针一样,Java中的this关键字就是代表当前对象的引用. 它有三个主要的作用: 1.在构造方法中调用其他构造方法.       比如有一个Student类,有三个构造函数,某一个构造函数中调用另外构造函数,就要用到this(),而直接使用Student()是不可以的. 2.返回当前对象的引用. 3.区分成员变量名和参数名. 看下面的例子: public class Student { private String name; p

  • Java中super和this的用法详解

    super 用法 super关键字用来访问父类内容,具体用法可分为三种: 1.子类的成员方法访问父类的成员变量 public class Animal { public int age = 10; } class Dog extends Animal { public int age = 5; public void showAge() { System.out.println(super.age); } } 2.子类的成员方法访问父类的成员方法 public class Animal { pu

  • Java中static变量作用和用法详解

    前言 static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法

  • Java中FilterInputStream和FilterOutputStream的用法详解

    FilterInputStream FilterInputStream 的作用是用来"封装其它的输入流,并为它们提供额外的功能".它的常用的子类有BufferedInputStream和DataInputStream. BufferedInputStream的作用就是为"输入流提供缓冲功能,以及mark()和reset()功能". DataInputStream 是用来装饰其它输入流,它"允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类

  • java中Collections.sort排序函数用法详解

    Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的. compare(a,b)方法:根据第一个参数小于.等于或大于第二个参数分别返回负整数.零或正整数. equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true. Collections.

  • Java开发中synchronized的定义及用法详解

    概念 是利用锁的机制来实现同步的. 互斥性:即在同一时间只允许一个线程持有某个对象锁,通过这种特性来实现多线程中的协调机制,这样在同一时间只有一个线程对需同步的代码块(复合操作)进行访问.互斥性我们也往往称为操作的原子性. 可见性:必须确保在锁被释放之前,对共享变量所做的修改,对于随后获得该锁的另一个线程是可见的(即在获得锁时应获得最新共享变量的值),否则另一个线程可能是在本地缓存的某个副本上继续操作从而引起不一致. 用法 修饰静态方法: //同步静态方法 public synchronized

  • java中Executor,ExecutorService,ThreadPoolExecutor详解

    java中Executor,ExecutorService,ThreadPoolExecutor详解 1.Excutor 源码非常简单,只有一个execute(Runnable command)回调接口 public interface Executor { /** * Executes the given command at some time in the future. The command * may execute in a new thread, in a pooled thre

  • Java 中泛型 T 和 ? 的区别详解

    目录 泛型中 T 类型变量 和 ? 通配符 区别 Generic Types 类型变量 用法 2.声明通用的方法 – 泛型方法: 有界类型参数 Wildcards 通配符 1.上界通配符:? extend 上界类型 2.无界通配符:? 3.下界通配符:? super 子类 类型擦除 泛型中 T 类型变量 和 ? 通配符 区别 定义不同 :T 是类型变量,? 是通配符 使用范围不同: ? 通配符用作 参数类型.字段类型.局部变量类型,有时作为返回类型(但请避免这样做) T 用作 声明类的类型参数.

  • JSP 中request与response的用法详解

    JSP 中request与response的用法详解 概要: 在学习这两个对象之前,我们应该已经有了http协议的基本了解了,如果不清楚http协议的可以看我的关于http协议的介绍.因为其实request和response的使用大部分都是对http协议的操作. request对象的介绍 我们先从request对象进行介绍: 我们知道http协议定义了请求服务器的格式: 请求行 请求头 空格 请求体(get请求没有请求体) 好了,这里我们就不详细介绍了,我们只看几个应用就可以了,没什么难度: 应

  • 在Java中操作Zookeeper的示例代码详解

    依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.6.0</version> </dependency> 连接到zkServer //连接字符串,zkServer的ip.port,如果是集群逗号分隔 String connectStr = "192.

  • java中stringbuffer线程安全分析实例详解

    在对于一些类作用于线程时,安全系数高的线程更推荐大家使用,在尽可能的程度上降低程序出错的可能性.对于本篇所要提到的StringBuffer而言,在其缓冲区中有多个线程的存在,我们在查询其内部方法时发现了锁的存在.现在我们就StringBuffer线程.锁的应用.线程安全分析逐步带来介绍. 1.StringBuffer线程说明 Java.lang.StringBuffer线程安全的可变字符序列.一个类似于String的字符串缓冲区,但不能修改.虽然在任意时间点上它都包含某种特定的字符序列,但通过某

随机推荐