zoukankan      html  css  js  c++  java
  • java this和super用法

    1、super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句) 

    2、this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)

    3、super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时)

    如:super.变量名

    super.成员函数据名(实参)

    4、this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)

    Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final 使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this



    举例说明:
    1)在类的内部代表对象本身,你应该看到过this.xxx(),this.xxx这种用法吧,
    this就代表这个类的对象,比如
    public class A {
    private String name;
    public void setName(String name) {
    //this就代表A的一个对象
    //当你实例一个A时,A a1 = new A();this就是那个a1,只是this在内部用,而a1在外部用
    //A a2 = new A()同理,这时在a2的内部,this就代表a2
    this.name = name;
    }
    }

    2)this的第二种用法,是用在构造函数里的
    当在构造器里要调用自己的其他构造器时,就用this
    this必须放在第一行
    public class A {
    private String name;
    public A() {
    this("no name");
    }

    public A(String name) {
    this.name = name;
    //other codes
    }
    }

    this关键字
    1)在类的内部代表对象本身,你应该看到过this.xxx(),this.xxx这种用法吧,
    this就代表这个类的对象,比如
    public class A {
    private String name;
    public void setName(String name) {
    //this就代表A的一个对象
    //当你实例一个A时,A a1 = new A();this就是那个a1,只是this在内部用,而a1在外部用
    //A a2 = new A()同理,这时在a2的内部,this就代表a2
    this.name = name;
    }
    }

    2)this的第二种用法,是用在构造函数里的
    当在构造器里要调用自己的其他构造器时,就用this
    this必须放在第一行
    public class A {
    private String name;
    public A() {
    this("no name");
    }

    public A(String name) {
    this.name = name;
    //other codes
    }
    }


    super关键字
    1)显式的调用父类的方法
    当从一个类继承时,子类和父类都有一个同名方法,也就是子类覆盖了父类的方法,可是又想调用父类的方法,那么就要用super,像继承swing的类时就有个好例子
    public class MyPanel extends JPanel {
    @Override
    public void paint(Graphics g) {
    super.paint(g);//如果不用super,那么就会调用自己的paint方法
    }
    }

    2)用在构造器,和this的用法一样,super也可以用在构造器,this是调用自己的其他构造器,那么super当然就是调用父类的构造器了
    -------------------------------------------------------

    super和this用在构造器的话,前者表示调用父类的够早器,后者表示调用本类的其他构造器,他们两个都必须是写在构造器里的第一行

    public class Person {
    private String name;
    private int age;
    public Person() {
    name = "";
    age = 0;
    }

    public Person(String n, int a) {
    name = n;
    age = a;
    }
    }

    public class Student extends Person {
    private String id;//学号

    public Student(String name, int age) {
    super(name, age);//必须写在第一行,子类无法直接访问父类的私有属性,所以通过调用父类的构造器类初始化属性
    }

    public Student(String id, String name, int age) {
    this(name, age);//因为本类已经有个构造器初始化name和age了,所以交给他来做就行了,也必须写在第一行
    this.id = id;
    }
    }
  • 相关阅读:
    详解C#委托,事件与回调函数
    JavaScript Dictionary
    jQuery匹配各种条件的选择器用法
    通用Json的处理办法
    JavaScript 创建类/对象的几种方式
    捕获和记录SQL Server中发生的死锁
    [转] HTML 获取屏幕、浏览器、页面的高度宽度
    [转] 实时监听input输入的变化(兼容主流浏览器)
    [转] Web移动端Fixed布局的解决方案
    [转] offsetParent 到底是哪一个?
  • 原文地址:https://www.cnblogs.com/fjsnail/p/2802461.html
Copyright © 2011-2022 走看看