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. Host和Server的开发

    Host和Server的开发 对于开发人员来说,代码就是最好的文档,如上一篇博文所说,下面我们就会基于Kanata项目的一些具体调用代码,来进一步深入理解OWIN的实现和作用. 今天我们先针对Host ...

  2. .net 伪静态、真静态 (mvc)

    MVC 模式下的伪静态: 通过路由就可以搞定 首先说下路由规则,允许多个路由规则,会从上之下寻找匹配 伪静态: 如果只写一个路由 那么 所有页面都必须是 html 结尾. 如果再加一个路由 就都支持了 ...

  3. c# Buffer.BlockCopy 合并 byte 数组

    今天遇到点问题需要合并 多个  byte[] 参见 :  http://q.cnblogs.com/q/30534/ 今天复习了 所有数组的基类是 Array

  4. 小记NodeJS两项小技巧(与HTTP相关)

    1,兼容HTTP1.1和HTTP1.0 区别在content-length,1.0接受定长,不接受变长,导致transfer-encodeing的chunked模式无法识别,最终导致无法识别BODY. ...

  5. 用bat启动sqlserver服务

    声明下这个脚本不是我写的,忘了是从哪看到的了,在此分享给大家,因为在我的理解中技术就是用来分享的,,希望原创作者看到了不要介意. 1.创建个文本,将后缀名改成.bat 2.将下边语句粘贴进去,然后保存 ...

  6. POJ1320 Street Numbers【佩尔方程】

    主题链接: http://poj.org/problem?id=1320 题目大意: 求解两个不相等的正整数N.M(N<M),使得 1 + 2 + - + N = (N+1) + - + M.输 ...

  7. Java 之Integer相等比较

    1.问题提出 今天在和同事讨论问题的时候,无意间谈到了Integer对象的比较,先看下代码: package test; public class IntegerEqual { /** * @para ...

  8. SQLServer中处理每天四亿三千万记录

    我是如何在SQLServer中处理每天四亿三千万记录的   首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地 ...

  9. Spring Resources之介绍和资源接口

    1.介绍 不幸的是Java的标准的java.net.URL类和针对不同的URL前缀的标准处理器都不够充分去访问所有的低级资源.例如,美誉标准化的URL实现可能用于去范围需要从classpath中或者相 ...

  10. 转载:每个C++开发者都应该使用的十个C++11特性

    这篇文章讨论了一系列所有开发者都应该学习和使用的C++11特性,在新的C++标准中,语言和标准库都加入了很多新属性,这篇文章只会介绍一些皮毛,然而,我相信有一些特征用法应该会成为C++开发者的日常用法 ...