this关键字+super关键字

一.this关键字
1.实例一:

(1)需求:使用Java类描述一个动物;

(2)实例:

class Animal{
    String name;    //成员变量
    String color;
    public Animal(String n,String c){
        name = n;
        color = c;
    }
    public void eat(){
        String name = "老鼠";    //局部变量
        System.out.println(name+"在吃……");
    }
}
 
class Demo1{
    public static void main(String[] args){
        Animal dog = new Animal("狗","白色");//此时在内存中存在两份name数据
        Animal cat = new Animal("猫","黑色");
        cat.eat();
    }
}

 

存在的问题:

当我们new一个动物cat时,让cat去调用eat方法,结果显示的却是老鼠在吃;

也就是说当存在同名的成员变量与局部变量时,在方法的内部访问的是局部变量,那是因为Java采取的是就近原则访问的,要解决这个问题就需要使用this关键字;

.this关键字的作用:

(1)如果存在同名的成员变量与局部变量时,在方法内部默认是访问局部变量的数据,可以通过this关键字指定访问成员变量的数据;

(2)在一个构造函数中可以调用另外一个构造函数初始化对象;

5.this关键字要注意的事项:

(1)存在同名的成员变量与局部变量时,在方法的内部访问的是局部变量(Java采取的是“就近原则”的机制访问的);

(2)如果在一个方法中访问了一个变量,该变量只存在成员变量的情况下,那么Java编译器会在该变量的前面添加this关键字;

6.this关键字调用其他的构造函数要注意的事项:

(1)this关键字调用其他的构造函数时,this关键字必须要位于构造函数中的第一个语句;

(2)this关键字在构造函数中不能出现相互调用的情况,因为是一个死循环;
二.super关键字
1. super关键字代表了父类空间的引用;

2. super关键字的作用:

(1) 子父类存在着同名的成员(包括变量和方法)时,在子类中默认是访问子类的成员,可以通过super关键字指定访问父类的成员;

(2) 创建子类对象时,默认会先调用父类无参的构造方法,可以通过super关键字指定调用父类的构造方法。
(1) 如果在子类的构造方法上没有指定调用父类的构造方法,那么java编译器会在子类的构造方法内加上super()语句。
(2) super关键字调用父类的构造函数时,该语句必须要是子类构造函数中的第一个语句。
(3) super与this关键字不能同时出现在同一个构造函数中调用其他的构造函数。因为两个语句都需要第一个语句。
(1) 代表的事物不一致。
① super关键字代表的是父类空间的引用。(并不能代表对象,只是代表一个对象中的一块内存而已)
② this关键字代表的是所属函数的调用者对象。
(2) 使用前提不一致。
① super关键字必须要有继承关系才能使用。
② this关键字不需要存在继承关系也可使用。
(3) 调用构造函数的区别:
① super关键字是调用父类的构造函数。
② this关键字是调用本类的构造函数。

3. super关键字调用父类构造方法要注意的事项:

注意:是两个关键字不能同时出现在同一个构造函数中去调用其他的构造函数,里面还是可以写this.num = num。并不是说不能出现this。

4. super关键字与this关键字的区别:
.实例:

class Father {
    int x = 1;
 
    Father() {
        System.out.println("这是父类无参的构造方法");
    }
 
    Father(int x) {
        this.x = x;
        System.out.println("这是父类有参的构造方法");
    }
 
    void speak() {
        System.out.println("我是父类");
    }
}
 
class Son extends Father {
    int y = 1;
    Son() {
        System.out.println("这是子类无参的构造方法");
    }
 
    Son(int y) {
        this.y = y+x;
        System.out.println("这是子类带参的构造方法");
    }
 
    void run() {
        super.speak();    //访问父类的函数
        System.out.println("我是子类");
    }
}
 
class Demo1{
    public static void main(String[] args) {
        Son s = new Son(3);
        System.out.println(s.y);    //4
    }
}

super关键字主要存在于子类方法中,用于指向子类对象中的父类对象;可以访问父类的属性、函数以及构造函数。

转载于:https://www.cnblogs.com/sy130908/p/11429286.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/247055.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中的print

python3 中去除了print语句,加入print()函数实现相同的功能 print() 会在输出窗口中显示一些文本。 >>> print "hello,world!" SyntaxError: Missing parentheses in call to print >>> print("hello,world!") hello,world…

final+static

final final关键字顾名思义代表“最后的”,意味着不能被更改。它的定义,可以概括地分为以下三点: 被final修饰的类不能被继承;被final修饰的方法不能被重写;被final修饰的变量不能被改变。注:引用类型的变量…

程序代码编辑器和浏览器代码编辑器&代码可视化执行过程

tutorialspoint http://www.tutorialspoint.com/codingground.htm 1. Sublime Text :http://blog.l1n3.net/editor/sublime-text-introduce/ 下载 :http://www.sublimetext.com/3 2. Notepad https://notepad-plus-plus.org/zh/ 更多细节请查看 htt…

匿名对象+内部类

匿名对象 普通的类对象在使用时会定义一个类类型的变量,用来保存new出来的类所在的地址。而匿名类取消掉了这个变量,这个地址由编译器来处理,并且在new出来之后,它占用的内存会有JVM自动回收掉。后续无法再使用了。例如 public cl…

听技术播客:一边学Python编程一边学英语

本文转自:http://codingpy.com/article/recommended-python-podcasts/ 学技术的朋友一般都会关注不少技术博客(blog),但是关注技术播客(podcast)的人估计不会太多。这里一方面也是由于相关的播客数量&#…

mysql补充

mysql补充 mysql使用流程 开启服务端,mysqld或者net start mysqlcmd下键入mysql -u root -p,输入设置好的密码,连接mysql客户端show databases;展示所有的mysql仓库创建一个库:create database CRM;然后sho…

编程书单:十本Python编程语言的入门书籍

本文转自:http://codingpy.com/article/10-python-beginner-books/ 本文与大家分享一些Python编程语言的入门书籍,其中不乏经典。我在这里分享的,大部分是这些书的英文版,如果有中文版的我也加上了。有关书籍的介绍,大…

JavaScript异步

JavaScript异步类型 延迟类型:setTimeout、setInterval、setImmediate监听事件:监听new Image加载状态、监听script加载状态、监听iframe加载状态、Message带有异步功能类型: Promise、ajax、Worker、async/awaitJavaScript常用异步编程 Prom…

Sublime配置与各种插件

本文转自:http://www.cnblogs.com/yyhh/p/4232063.html Sublime Text 3 安装Package Control 点击View -> Show Console 在下方命令行内,输入以下命令。 import urllib.request,os;pfPackage Control.sublime-package;ippsublime.installed_packages_…

把Sublime Text 2打造成一个轻量级Python的IDE

本文转自:http://blog.l1n3.net/python/sublime-text-to-python-ide/ 因为这段时间迷上了Python,所以想吧Sublime Text 2弄成一个Python的简易IDE,Python自带的IDLE简直太难用!!!! 配置Python环…

数据库表操作、数据类型及完整性约束

数据库表操作、数据类型及完整性约束 库操作补充 数据库命名规则: 可以由字母、数字、下划线、@、#、$区分大小写唯一性不能使用关键字如 create select不能单独使用数字最长128位表操作补充 #语法: create table 表名…

算法第一次作业

1.代码规范(由于日后可能会用C和Java,就找了两种) Google C代码规范:https://blog.csdn.net/freeking101/article/details/78930381 Ggoogle Jave代码规范:https://www.jianshu.com/p/4e50269037ed 2.《数学之美》读后…

Sublime Text官方文档 中英文版本

英文版本:http://docs.sublimetext.info/en/latest/index.html 中文翻译版本:http://sublime-text.readthedocs.org/en/latest/reference/build_systems.html

第99:真正理解拉格朗日乘子法和 KKT 条件

转载于:https://www.cnblogs.com/invisible2/p/11441485.html

有了CodinGame,玩着游戏就能学编程

本文转自:http://www.codingpy.com/article/learning-to-code-becomes-a-game/ 今天编程派向大家推荐一个有趣的编程练习平台,而它与其他平台的差异,就在于它将编程练习变成了一个个游戏。这个平台的名字叫CodinGame,是一家法国创…

第98:svd原理

SVD分解:任何矩阵都可以分解成第一行的形式,3个相乘。UV都是正交矩阵,中间的是奇异值。 3个相乘的形式可以拆分。即奇异值*第一行*第一列。在相加。 奇异值有时很小,在这种情况下,丢掉,可以减少计算量&…

Python学习(变量与字符串)

print()、input()、if/else就可以做一个简陋的游戏 print() # 打印函数,将信息打印出来input() # 将信息打印,并且要求输入一段话,并且把这段话。input函数,这个函数会将字符串显示在IDLE上,并且让用户输入信息&#…

第97:一文读懂协方差与协方差矩阵

转载于:https://www.cnblogs.com/invisible2/p/11442777.html

Python清屏小结

1. cmd–>python import os i os.system(cls) 2.通用的清屏 def cls(): print("\n"*100) 3.为idle增加一个清屏的扩展ClearWindow 首先下载clearwindow.py(点击可直接下载,不能下载的可以右键保存,格式为py结尾&#xff0…

设计模式之模板方法模式实战解析

本文微信公众号「AndroidTraveler」首发。 背景 最近在看《设计模式之禅》,为了能够更加深入的理解设计模式,达到学以致用。 这边记录一下自己的一些感受和看法,并结合具体代码实战来进行说明。 模板方法模式 但凡和设计模式挂上钩&#xff0…