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. NET MVC中使用FluentValidation

    ASP.NET MVC中使用FluentValidation验证实体   1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion ...

  2. NET 平台下的插件化开发内核

    .NET 平台下的插件化开发内核(Rabbit Kernel)   每个程序猿都有一个框架梦,曾经在2013年8月15日写过一篇“Koala Framework是什么?我为什么要写这个框架?”的文章, ...

  3. java23种设计模式详解(转)

    设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...

  4. sp.Net MVC4 + Oracle + EasyUI + Bootstrap2

    Asp.Net MVC4 + Oracle + EasyUI + Bootstrap 第二章   Asp.Net MVC4 + Oracle + EasyUI + Bootstrap 第二章 --使用 ...

  5. How to:Installshield判断操作系统是否为64位,并且为操作注册表进行设置

    原文:How to:Installshield判断操作系统是否为64位,并且为操作注册表进行设置 IS脚本操作注册表在64位平台下必须有特殊的设置 if (SYSINFO.bIsWow64) then ...

  6. 怎样使用万用表来测试板子上的TX和RX引脚

    最近在看openwrt时看到的一个方法,直接看下面写的: 文章来自:http://wiki.openwrt.org/doc/hardware/port.serial 经实际测试时发现,将万用表的负表笔 ...

  7. 图解:SQL Server SSIS包和job的部署攻略

    原文:图解:SQL Server SSIS包和job的部署攻略 以下将建立一个SQL Server SSIS包 然后在job中使用这个包,并将job部署到目标机器 1. 首先建立ssis包,使用sql ...

  8. 什么是umbraco

    在win7上部署umbraco Umbraco是一个开放源码的CMS内容管理系统,基于asp.net建立,使用mssql进行存储数据. 使用Umbraco ,设计师能创造出有效的XHTML标记模板和开 ...

  9. 使用fixed制作浮动广告(注意:解决闪屏问题,但适用于高版本浏览器,低版本的浏览器不适用)

    <script language="javascript" type="text/javascript"> //隐藏广告 function clos ...

  10. Git 和 Github的关系

    惭愧,这个问题到昨天才弄明白! Git 其实是一种版本控制的协议,和SVN/CVS类似,git协议定义了一个版本控制相关的各个操作,和SVN/CVS不同的是,git采用的是分布式的方法,并不需要服务器 ...