【Java面向对象】继承的认识与实现(2) 关键字 this 与 super 区别

简介: 【Java面向对象】继承的认识与实现(2) 关键字 this 与 super 区别

this 的初步认识


Q:什么是 this 关键字


A: this是当前对象的引用,就是说当前用构造函数建的对象是谁,这个this就代表谁,它是一个引用。


Q:怎么使用 this 关键字


我们来看下面这个案例。


public class Text {
  public static void main(String[] args) {
       student stu = new student("cc");
       stu.info();
   }
}
class student {
   String name;
   public student(String sname) {
       name = sname;
   }
   public void info() {
       System.out.println(name);
   }
}


在这个案例里面,我们通过调用构造器来对name赋值,由于sname与name不能相同,这就让构造器看起来就很奇怪,有没有什么方法可以把构造器的形参直接写成属性名呢。


我们使用this关键字就可以了!


public class Text {
  public static void main(String[] args) {
       student stu = new student("cc");
       stu.info();
   }
}
class student {
   String name;
   public student(String name) {
       this.name = name;
   }
   public void info() {
       System.out.println(name);
   }
}



Q: this 关键字有什么用处


this.data : 用来访问本类的成员方法。

举个例子(上面那个就是)

this.func(): 用来在普通成员方法中调用另一个成员方法。

举个例子

public class Text {
  public static void main(String[] args) {
       student stu = new student("cc");
       stu.Class();
   }
}
class student {
   String name;
   public student(String name) {
       this.name = name;
   }
   public void Class() {
       System.out.println(name+"上课");
       this.Homework();
   }
   public void Homework() {
       System.out.println(name+"正在写作业");
   }
}


this(): 用来访问本类的成员方法。


举个例子

public class Text {
   public static void main(String[] args) {
       student stu = new student();
       stu.show();
   }
}
class student {
   String name;
   public student() {
       this("cc");
   }
   public student(String name) {
       this.name = name;
   }
   public void show() {
       System.out.println(name);
   }
}


注意: this() 不能使用在普通方法中 只能写在构造方法中,而且必须是构造方法中的第一条语句。



super 的初步认识


Q:什么是 super 关键字


A: supe在java的子类中指代父类引用。


Q: super 关键字的作用


调用父类被子类重写的方法

调用父类被子类重定义的字段(被隐藏的成员变量)

调用父类的构造方法


Q: super 关键字的特点


我们来看下面这个案例。


class Animal {
  //构造函数
  public Animal() {
  System.out.println("Animal类的无参数构造函数执行");
  }
}
class Cat extends Animal{
  //构造函数
  public Cat() {
  System.out.println("Cat类的无参数构造函数执行");
  }
}


当我们new一个新的cat类的时候,会出现运行结果:


Animal类的无参数构造函数执行
Cat类的无参数构造函数执行


为什么呢?

当子类的构造方法内第一行没有出现“super()”时,系统会默认给它加上无参数的"super()"方法。上面的例子就相当于:


class Animal {
  //构造函数
  public Animal() {
  System.out.println("Animal类的无参数构造函数执行");
  }
}
class Cat extends Animal{
  //构造函数
  public Cat() {
  super();
  System.out.println("Cat类的无参数构造函数执行");
  }
}


this 与 super 区别


this和super一样,都是对象内部的引用变量,只能出现在对象内部;

this指向当前对象自己,super指向当前对象的父类型特征。

this()和super()都只能出现在构造方法的第一行,因此this()和super()方法不能共存,当一个类的构造方法第一行中没有this(),也没有super(),系统默认有super()方法;

this()是构造方法中调用本类其他的构造方法,super()是当前对象构造方法中去调用自己父类的构造方法。


相关文章
|
5天前
|
存储 安全 Java
一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
这篇文章是关于Java面试的第二天笔记,涵盖了HashMap与HashTable的区别、ConcurrentHashMap的实现原理、IOC容器的实现方法、字节码的概念和作用、Java类加载器的类型、双亲委派模型、Java异常体系、GC如何判断对象可回收、线程的生命周期及状态,以及sleep、wait、join、yield的区别等十道面试题。
一天十道Java面试题----第二天(HashMap和hashTable的区别--------》sleep、wait、join)
|
5天前
|
存储 关系型数据库 MySQL
一天五道Java面试题----第八天(怎么处理慢查询--------->简述Myisam和innodb的区别)
这篇文章是关于Java面试中关于数据库性能优化和MySQL特性的五个问题,包括处理慢查询、ACID特性保证、MVCC概念、MySQL主从同步原理以及MyISAM和InnoDB存储引擎的区别。
|
5天前
|
前端开发 Java 编译器
【前端学java】java中的Object类和前端中的Object有什么区别(9)
【8月更文挑战第10天】java中的Object类和前端中的Object有什么区别
13 0
【前端学java】java中的Object类和前端中的Object有什么区别(9)
|
6天前
|
Java
Java 新手入门:Java 封装、继承、多态详解
Java 新手入门:Java 封装、继承、多态详解
16 1
|
11天前
|
Java 数据安全/隐私保护
09 Java面向对象三大特征(概述)
09 Java面向对象三大特征(概述)
29 4
|
11天前
|
存储 Java 程序员
08 Java面向对象基础(对象与类+实例变量与方法+构造方法+this关键字)
08 Java面向对象基础(对象与类+实例变量与方法+构造方法+this关键字)
32 4
|
5天前
|
Java 编译器
【Java】继承
【Java】继承
|
5天前
|
存储 SQL 搜索推荐
一天十道Java面试题----第一天(面向对象-------》ArrayList和LinkedList)
这篇文章是关于Java面试的笔记,涵盖了面向对象、JDK/JRE/JVM的区别、`==`和`equals`、`final`关键字、`String`、`StringBuffer`和`StringBuilder`的区别、重载与重写、接口与抽象类、`List`与`Set`、`hashcode`与`equals`以及`ArrayList`和`LinkedList`的对比等十个主题。
|
8天前
|
Java
Java中notify 和 notifyAll有什么区别
【8月更文挑战第10天】Java中notify 和 notifyAll有什么区别
16 0