this关键字、访问修饰符、super关键字

Java关键字this只能用于方法方法体内,而且只能用在非静态方法内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是this。

This关键字表示当前对象。

什么是当前对象呢?

谁在调用存在this关键字的方法那么谁就是当前对象。

什么时候使用和什么时候不能使用this呢?

在一个方法内,方法的局部变量与成员变量同名的时候就要使用this关键字,

比如 this . 成员变量,在一个类中也可以通过this关键字调用其它的构造方法,切记只能是在同类中。

如果这个方法用static修饰的话那么这个方法内不能存在this关键字

 1 package xiao.li;
2
3 public class this关键字
4 {
5 String name;
6 /*
7 * 无参构造函数
8 */
9 this关键字()
10 {
11 this("小明");
12 /*
13 * 通过this调用构造方法, this(参数列表)
14 * 那么 this("小明")==this关键字(String name)
15 * this()==this关键字(); 需要注意的是:在构造方法里面使用this 那么必须是第一句语句.....
16 */
17 System.out.println("无参构造函数");
18 }
19 /*
20 * 给成员变量赋值的构造方法
21 * 像这种情况就应该用this关键字来表明那个是成员变量
22 */
23 this关键字(String name)
24 {
25 this.name=name;
26 }
27 public static void show()
28 {
29 //this.name="小明"; //这样是错误的,因为在静态方法内不能使用this关键字,调用构造方法也不行
30 System.out.println("表演");
31 }
32 public void eat()
33 {
34 this.name="小明";
35 System.out.println(this.name+"正在吃饭");
36 }
37 public static void main(String[] args)
38 {
39 this关键字 t = new this关键字();
40 t.eat(); //t 这个对象在调用eat方法,那么eat方法内存在this关键字,那么这个this就代表t这个对象。
41 }
42 }

访问修饰符

修饰符

类内部

同一个包

子类

任何地方

private

     

default

   

protected

 

public

Private:类访问权限,本类内部可以访问,不能继承到子类。

Default:什么都不写,包访问权限:本类内部可以访问,同包其它类也可以访问,同包可继承

Protected:子类访问权限,本类内部可以访问,不同包的子类也可以访问,同包其它类也可以访问,能继承到子类

Public:公共访问权限,任何地方都可以访问,能继承到子类

这些访问修饰符可以修饰类、修饰方法、修饰成员变量

super

   ■ 表示当前对象的父类对象的一个引用

   ■ 可以调用当前对象的父类对象的方法/变量

   ■ 可以调用当前对象的父类对象的构造函数

   ■ 把当前对象的父类对象的引用作为参数传递给其他方法、

注意:只能在子类的构造方法内使用,而且必须是第一句

关键字super和继承一起建立类和它的父类的紧密联系。继承隐含地指出子类对父类所拥有的访问权限

关键字Super在构造方法的使用中是非常重要的,和方法不同,构造方法是不能继承的;因此super是访问父类中构造方法的惟一途径。在子类的构造方法中用 Super(参数列表);就可以访问父类中的构造方法了

 
 1 package xiao.li;
2 /*
3 * 人类
4 */
5 class Person
6 {
7 String name;
8 public Person()
9 {
10 System.out.println("我是父类无参构造方法");
11 }
12 public Person(String name)
13 {
14 this.name=name;//赋值给成员变量
15 System.out.println("我是父类有参构造方法,给成员变量赋值");
16 }
17 }
18 /*
19 * 学生类继承了人类
20 */
21 class Student extends Person
22 {
23 public Student()
24 {
25 /*
26 * 这里没有表用调用父类的无参构造方法,其实父类的构造方法是隐式存在的......
27 * 当子类不指明要调用其它构造方法时则默认执行无参构造方法
28 */
29 System.out.println("我是子类无参构造方法");
30 }
31 public Student(String name)
32 {
33 super("小明"); //这句必须在任何一个子类中的构造方法都必须是第一句,不能在非构造方法内使用super关键字
34 super.name=name;//
35 /*
36 * 这里的意思就是调用父类的有参构造方法....
37 * 这里指明了调用父类有参构造方法
38 */
39 System.out.println("我是子类有参构造方法,正在给父类成员变量赋值");
40 }
41 }
42 public class super关键字 {
43 public static void main(String[] args) {
44
45 Student stu1 = new Student();//创建子类stu1对象
46 /*
47 * 创建子类stu1对象的输出结果为:
48 * 我是父类无参构造方法
49 * 我是子类无参构造方法
50 * 为什么呢?又没有在子类的无参构造方法内指明调用父类构造方法,
51 * 因为在创建子类对象的时候就会默认先执行父类的无参构造方法再执行子类的无参构造方法
52 */
53 Student stu2 = new Student("小明");//创建子类stu2对象
54 /*
55 * 创建子类stu2对象的输出结果为:
56 * 我是父类有参构造方法,给成员变量赋值
57 * 我是子类有参构造方法,正在给父类成员变量赋值
58 */
59 }
60 }

this和super的区别

区别

This

Super

使用

调用本类中的字段或方法

从子类中调用父类的字段或方法

构造

可以调用本类构造方法且有一个构造方法要作为出口

从子类调用父类的构造方法,不管子类如何安排最终一定会调用,默认调用的是父类无参构造方法

要求

调用自身构造方法时需要放在首行

调用父类构造方法时,放在子类构造方法首行

特殊

表示当前对象

表示当前对象的父类

 
 
分类: Java基础

this关键字、访问修饰符、super关键字的更多相关文章

  1. Java_关键字、匿名对象、内部类、访问修饰符、代码块

    final关键字 概述: 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后, ...

  2. 什么是封装? ----------------php中"public"类似的访问修饰符分别有什么作用?----什么是抽象?抽象的关键字以及用法----- 什么是接口?接口的关键字以及用法-------------

    什么是封装? ------------------------------------封装是php面向对象的其中一个特性,将多个可重复使用的函数封装到一个类里面.在使用时直接实例化该类的某一个方法,获 ...

  3. 20151024_004_C#基础知识(C#中的访问修饰符,继承,new关键字,里氏转换,is 和 as,多态,序列化与反序列化)

    1:C#中的访问修饰符 public: 公共成员,完全公开,没有访问限制. private: 私有的,只能在当前类的内部访问. protected: 受保护的,只能在当前类的内部以及该类的子类中访问. ...

  4. C#关键字:访问修饰符

    一.访问修饰符 访问修饰符有public.private.protected.internal和protected internal.它们是修饰在类型(类.接口.委托.结构和枚举)和类型成员(字段.属 ...

  5. Java中的一些关键字:static,final,和abstract,interface,以及访问修饰符说明

    1.关键字可以修饰的说明: 关键字 属性(是否可修饰) 方法(是否可修饰) 类(是否可修饰) static 是 是 是 final 是 是 是 abstract 否 是 是 2.关键字的意义: 关键字 ...

  6. abstract关键字、final关键字、static关键字、访问修饰符详解

     abstract关键字.final关键字.static关键字.访问修饰符详解 abstract关键字: final关键字: static关键字: 访问修饰符:

  7. java标识符、修饰符和关键字

    一.标识符 1.概念:标识符好比人和物的姓名,java中标识符就是类.对象.方法.变量.接口和自定义数据类型等等的名字. 2.规则: (1)首位不能是数字. (2)标识符对大小写敏感. (3)不可以是 ...

  8. java中的标识符、修饰符、关键字

    关键字的特点:1.完全小写的字母,2,在增强版记事本中有特殊颜色 例如@是电子邮箱当中有特殊含义的.被保留的.不能随意使用的字符,关键字. 例如图中public.class.static.void是关 ...

  9. JAVA基础语法——标识符、修饰符、关键字(个人整理总结)

    JAVA基础语法——标识符.修饰符.关键字 一 . 标识符 1.1    什么是标识符 就是程序员在定义java程序时,自定义的一些名字,例如helloworld 程序里关键字class 后跟的Dem ...

随机推荐

  1. Html5 の 微信飞机大战

    (function () { var imageUrl = "images/"; //获取画布对象 var c = $("#game-box").get(0); ...

  2. SQL Server日志文件庞大收缩方法(实测好用)

    原文:SQL Server日志文件庞大收缩方法(实测好用) 这两个命令连续执行,间隔时间越少越明显(可多次运行),直到达到效果 --截断 BACKUP LOG CloudMonitor TO DISK ...

  3. Google Maps API Web Services

    原文:Google Maps API Web Services 摘自:https://developers.google.com/maps/documentation/webservices/ Goo ...

  4. sql性能

    ---正在运行的 select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT   from v$session a, v$sqlarea b where a ...

  5. 【 D3.js 入门系列 --- 9.6 】 生产的包图

    我的个人博客是:www.ourd3js.com csdn博客为:blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 打包图( Pack ).用于包括与被包括的关系,也表示各个对象的权重, ...

  6. linux下编译安装mysql5.5以上版本

    安装cmake: tar zxvf cmake-2.8.4.tar.gz cd cmake-2.8.4 ./configure  --prefix=/usr/local/cmake make & ...

  7. 如何查看IC卡燃气表读数和剩余量?

    如今新建的楼房都是使用IC卡燃气表,拿到房子入住时也没有见到IC卡燃气表的使用说明书.非常多人可能为此而苦恼.这里就讲一下怎样查看IC卡燃气表读数及剩余金额. 产品外观 可选功能 watermark/ ...

  8. 初探Django线程发送邮件

    最近一直在纠结一个邮件发送的问题. 在本地Linux下搭建程序,不填写EMAIL设置就可以成功发送邮件,在远端的云服务器下的Linux环境就发送不了.在windows下搭建的程序也不能发送注册邮件,很 ...

  9. PHP 1:在Windows上安装和配置PHP,Apache和My SQL

    原文:PHP 1:在Windows上安装和配置PHP,Apache和My SQL 如果你Google一把类似的主题,你会发现相关的文章可以塞满你的硬盘.在这里之所以把它再次拿出来,目的是想记录我作为一 ...

  10. 使用Windows2003创建DNS服务器 - 进阶者系列 - 学习者系列文章

    Windows 2003的DNS服务器的配置还是比较简单的.下面简要介绍下DNS服务器的配置. 1.    打开控制面板,选择 添加删除Windows组件,选择 网络服务 ,选择 详细信息,选择 域名 ...