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. JS中Array数组的三大属性用法

    原文:JS中Array数组的三大属性用法 Array数组主要有3大属性,它们分别是length属性.prototype属性和constructor属性. JS操作Array数组的方法及属性 本文总结了 ...

  2. LCD开发之汉字显示

    一.LCD显示原理 利用液晶制成的显示器称为LCD,根据驱动方式可分为静态驱动.简单矩阵驱动以及主动矩阵驱动3种.当中,简单矩阵型又可再细分扭转向列型(TN)和超扭转式向列型(STN)两种,而主动矩阵 ...

  3. jQuery插件——多级联动菜单

    jQuery插件——多级联动菜单 引言 开发中,有好多地方用到联动菜单,以前每次遇到联动菜单的时候都去重新写,代码重用率很低,前几天又遇到联动菜单的问题,总结了下,发现可以开发一个联动菜单的功能,以后 ...

  4. C++并发编程学习笔记<1> 入门

    入门 多线程C++程序是什么样子的? 它看上去和其它全部C++程序一样,一般是变量.类以及函数的组合. 唯一真正的差别在于某些函数能够并发执行, 当然.为了并发地执行函数,必须使用特定的函数以及对象来 ...

  5. unity3d插件Daikon Forge GUI 中文教程-1-Daikon Forge介绍

    (游戏蛮牛首发)大家好我是孙广东官网提供了专业的视频教程http://www.daikonforge.com/dfgui/tutorials/,只是是在youtube上,要观看是须要FQ的. 只是教程 ...

  6. WaitHandle、AutoResetEvent、ManualResetEvent

    多线程中的锁系统(三)-WaitHandle.AutoResetEvent.ManualResetEvent 介绍 本章主要说下基于内核模式构造的线程同步方式,事件,信号量. 目录 一:理论 二:Wa ...

  7. Android EventBus现实 听说你out该

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/40794879.本文出自:[张鸿洋的博客] 1.概述 近期大家面试说常常被问到Ev ...

  8. jQueryRotate 转盘抽奖代码实现

    代码如下: 例子兼容IE6,7,8 以及高版本浏览器,如有bug请回复! 1.html结构 <!doctype html> <html lang="en"> ...

  9. 单独一个img标签的居中显示

    针对页面当中通过img插入图片的时候,要保证这个图片在页面内容当中居中,一般的做法是在外面套一个div,通过给div加入 {margin:0 auto;} 来控制图片的居中. 那么如果针对后台上传的图 ...

  10. 基于C++11线程池

    1.包装线程对象 class task : public std::tr1::enable_shared_from_this<task> { public: task():exit_(fa ...