初学JAVA,感觉很多知识点不熟悉,看了好多遍教材,最终还是决定把它写下来,加深印象以便忘了的时候再过来复习一下。看上去字数可能比较多,其实内容很简明。

首先看this的用法:

 package test;

 public class father {

     private String student1 = "xiaoAi ";
private String student2 = "jiangQiao ";
private int age1 = 25;
private int age2 = 26;
private int grade1 = 98;
private int grade2 = 96; protected father(String name, int age, int grade) {
String student1 = "occur error1 ";
String student2 = "occur error2 "; name = this.student1;
age = this.age1;
grade = this.grade1;
System.out.println(name + "is" + " " + age + " years old and get" + " " + grade); name = student2;
age = age2;
grade = grade2;
System.out.println(name + "is" + " " + age + " years old and get" + " " + grade);
} public static void main(String[] args) {
new father("cc", 25, 100); } }

在father这个构造函数里,对已经初始化的变量再次赋值,student1用的是this.的方式,它的作用是在这个函数里面去引用外部的成员变量。student2则不是这样,因为在father函数中,student2被重新String并赋值,此时作为局部变量,在优先级上高于成员变量,它没有使用this关键字,所以输出的结果如图:

super:

 package test;

 public class father {

     public String student = "xiaoXiao";

     protected father() {

     }

     // 测试this、以及private限定的范围、给出protected
protected father(String name, int age, int grade) { } }
 package test;

 public class remote extends father {

     String student = "occur error";

     protected remote(String name, int age, int grade) {

         name = super.student;
System.out.println("Here is " + name + " *** " + age + " *** " + grade); } public static void main(String[] args) { new remote("xiXi", 25, 100); }
}

这里,remote类中初始化了student,但实际上它有从father继承的属性。此时如果我们通过构造函数16行new一个新的出来,那么它会执行第10行,打印信息为??

Right anwser is "xiaoXiao" rather than "occur error"。因为super关键字可以从父类中获取到开放的成员变量,也就是说该变量不能被private所修饰。

如果把使用this和super比作上楼梯台阶,this能做到一下一格,super则一下两格。

protected:

 package test;

 public class father {

     public static void main(String[] args) {
Remote rc = new Remote();
rc.println(); } }
 package test;

 public class Remote {

     private String exam = "you only have 30 minutes";

     protected void println() {
System.out.println(exam);
} }

同一个package下面,可以成功调用。不同package就不可以了,系统会提示让你把protected换成public,即使是继承关系,也不可以。这样看来,protected确实起到了保护的作用,但不如private彻底。

final:

顾名思义有点“最后的”意思,因此这个理解起来好像更容易点,就是当final关键字修饰变量的时候,该变量必须初始化并且不能再被赋值,也就是怎么出现怎么离开。当它修饰类的时候,这个类就不能在被继承,感觉像是shutdown。

最后关于构造函数,其实也已经涉及在前面的代码里面,我个人理解构造函数的使用看你的需求怎样。比如:

这里的构造函数是father()和father(String ,int , int );也就是当你father ff = new father();这么干的时候,可以决定是否在括号里输入参数,或输入怎样的参数来达到某种目的。当你任何构造函数都不写的时候,系统会默认一个无参构造函数。

写的有不对的地方烦请大家指正,共同进步。

浅析构造函数,及public、private、protected、final、this、super关键字的更多相关文章

  1. 深入浅出OOP(五): C#访问修饰符(Public/Private/Protected/Internal/Sealed/Constants)

    访问修饰符(或者叫访问控制符)是面向对象语言的特性之一,用于对类.类成员函数.类成员变量进行访问控制.同时,访问控制符也是语法保留关键字,用于封装组件. Public, Private, Protec ...

  2. PHP中public,private,protected,abstract等关键字用法详解

    PHP中常用的关键字 在PHP中包含了很多对函数和类进行限制的关键字,常用的通常有abstract,final,interface,public,protected,private,static等等, ...

  3. public/private/protected访问控制权限的区别

    //public/private/protected访问控制权限的区别//时间:2016/8/16 //(一)修饰成员: //public: 在类内.类外都能使用 . //protected: 在类内 ...

  4. Java中public,private,protected,和默认的区别

    Java中public,private,protected,和默认的区别 1.private修饰词,表示成员是私有的,只有自身可以访问: 2.protected,表示受保护权限,体现在继承,即子类可以 ...

  5. public private protected和默认的区别(转自百度)

    public private protected和默认的区别 Java中对类以及类中的成员变量和成员方法通过访问控制符(access specifier)进行区分控制.刚学Java语言的同学可能对pu ...

  6. php class中public,private,protected的区别,以及实例

    一,public,private,protected的区别 public:权限是最大的,可以内部调用,实例调用等. protected: 受保护类型,用于本类和继承类调用. private: 私有类型 ...

  7. public,private,protected的区别

    一,public,private,protected的区别public:权限是最大的,可以内部调用,实例调用等.protected: 受保护类型,用于本类和继承类调用.private: 私有类型,只有 ...

  8. 访问权限系列一(public/private/protected/default):成员变量

    通过两个程序包对自身或互相之间的访问,得到结果.(先编译Test_01,得到class文件,通过Test的集中访问情况) 如下Test.java中内容: package com.java; /* * ...

  9. public private protected default

    public private protected default 这几个限定访问控制符只是在编译阶段起作用,在运行阶段不起作用 private修饰符 , 本类可以访问 default修饰符 , 本类, ...

  10. PHP中const,static,public,private,protected的区别

    原文地址:http://small.aiweimeng.top/index.php/archives/54.html const: 定义常量,一般定义后不可改变static: 静态,类名可以访问pub ...

随机推荐

  1. 单元测试系列之八:Sonar 数据库表关系整理一(续)

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 简介:Sonar平台是目前较为流行的静态代码扫描平台,为了便于使用以及自己二次开发,有必要对它的数据库结构进行学习 ...

  2. Ubuntu 远程 Jupyter 配置

    Ubuntu 远程 Jupyter 配置 每次上课都要重新部署环境,最近看到阿里云的大学生优惠活动,就着手了一台云服务器,于是就把环境部署在上面了. 环境:阿里云 Ubuntu 16.04 64位 新 ...

  3. Nodejs运行错误小结

    (迁移自旧博客2017 04 15) 在使用过程中会遇到一些问题,学习过程中不定期更新. 问题一 错误如下 **events.js:72 throw er; // Unhandled 'error' ...

  4. Docker Swarm Mode 学习笔记(创建 Swarm 集群)

    Swarm 集群由管理节点与工作节点组成. 初始化集群 使用命令:docker swarm init 如果你的 Docker 主机有多个网卡, 拥有多个 IP 地址, 必须使用 --advertise ...

  5. oracle 11g RAC日志分布

    oracle 下的alert日志$ORACLE_BASE/diag/rdbms/orcl/orcl1/trace/alertorcl1.log grid 下的 alert 日志 $ORACLE_HOM ...

  6. css复合选择器的权重

    选择器的权重 标签选择器的权重为0001 class选择器的权重为0010 id选择器的权重为0100 属性选择器的权重为0010 伪类选择器的权重为0010 伪元素选择器的权重为0010 包含选择器 ...

  7. 开发者中心没有勾选 ipad却需要传宣传图片的解决方法

    1.通过模拟器 运行一个ipad 把ipad的比例调到100% 然后保存图片,如果没有适配ipad会出现上下左右黑色边框,这些不必在意,把保存的图片拖到开发者中心即可,勾选右侧 ,都使用12.9英寸图 ...

  8. 动态修改JS对象的值及React setState

    一.在JS里使用(非ES6) 实现场景: 给一个空对象填充某一指定数组内的值 并随机生成数量 const fruit = ['apple', 'banana', 'orange'] let fruit ...

  9. DAY 25多态、反射、异常处理

    一.面向对象与面向过程分析 1.print(len('123')) # 面向过程 #清晰知道操作的功能,但不能明确操作的具体对象,需要传入参数. 2.print('123'.__len__()) # ...

  10. IDEA永久激活方法

    Idea版本:2018.1.5 准备工作: 1.安装,从官网下载安装,点击进去之后,进行选择需要的版本 2.下载破解包: 链接:https://pan.baidu.com/s/1lCb0MGetP1_ ...