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. 登录记住账号和密码小Demo

    读取 // 1.读取沙盒中plist文件 // 1.1.获得沙盒根路径 NSString *home = NSHomeDirectory(); // 1.2.拼接Documents路径 NSStrin ...

  2. SQL表连接

    背景 在上次的自考科目<数据库系统原理>中.已经接触到了关于数据库表连接的一些知识,近期的学习过程中又用到了关于数据库表的连接问题,趁此再跟大家一起回想一下. 导图总结 首先用一张思维导图 ...

  3. Struts2_2_第一Struts2应用

    web.xml文件的配置与1同样. 1)HelloWorld类的代码: public class HelloWorldAction { private String message; public S ...

  4. 使用SqlBulkCopy导入数据至MS SQL Server

    原文:使用SqlBulkCopy导入数据至MS SQL Server Insus.NET一直使用表类型来数据入MS SQL Server.参考<存储过程参数为DataTable>http: ...

  5. APP 半自适应 WEB页面

    特别赶,响应式纯自适应的,有空写了新的发. (在手机上看,页面上看一定乱) <!DOCTYPE html><html> <head> <meta http-e ...

  6. 程序员面试必备经典CTCI,谷歌面试官经典作品!

    1.1 判断一个字符串中的字符是否唯一 1.2 字符串翻转 1.3 去除字符串中重复字符 1.8 利用已知函数判断字符串是否为另一字符串的子串 2.1 从链表中移除重复结点 2.2 实现一个算法从一个 ...

  7. <转>如何利用socket进行HTTP访问

    原文:<转>如何利用socket进行HTTP访问 如何利用socket进行HTTP访问 平常我们要访问某个URL一般都是通过浏览器进行:提交一个URL请求后,浏览器将请求发向目标服务器或者 ...

  8. CloudNotes

    CloudNotes 今天,我发布了CloudNotes的一个更新版本:1.0.5484.36793.这个版本与1.0.5472.20097不同的是,它拥有增强的笔记列表,与之前单调的列表系统相比,新 ...

  9. c# 委托详解

    1.委托声明 2.委托入门实例 namespace ConsoleApplication1 { public delegate void methodDelegate(string str); cla ...

  10. Android 使用Gson解析json案例具体解释

    一.眼下解析json有三种工具:org.json(Java经常使用的解析),fastjson(阿里巴巴project师开发的),Gson(Google官网出的),解析速度最快的是Gson,下载地址:h ...