封装,是面向对象三大特征之一。它指的是将对象的状态信息隐藏在对象内部,不允许其他累直接访问,带有隐私权的概念。假如其他类要访问一个类的私有属性,只能通过它对外开放的方法是才合法的,否则都是违法,不允许放行的。
因为封装,于是出现了访问控制符的出现,他们分别是private、默认无修饰符(default)、protected、public 四种,下面分别介绍下它们:
private: 译意是“私有的”。被private修饰的属性或者方法是几乎被类完全占有,它只能在定义它的类里使用,如果外界需要访问,那么可以通过类对外开放的方法。
default:没有使用任何访问控制符,就称它是默认访问控制(和friendly是不同时期的同一产物)。它的最高限制在同个包里,即被default修饰的属性只能被同个包里的其它类访问,当然可以在定义它的类里被访问。
protected:译意是“被保护的”。它又高一级 -- 子类访问权限,即继承这个类的子类不管跟父类有没有在同个包,都可以访问被protected修饰的成员。同理,同个包中,同个类中也可以被访问咯。
public: 译意是“公共的”。 这是最宽松的访问控制级别。只要一个类在其它类能生产实例,那么该实例就可以毫无阻碍的访问任何被public修饰的成员。
小结如下表
代码如下:
package encapsulation;
/**************************************************
*
* @author: 瘋叻ハ.兩
* @create-time: 2011-5-29 下午09:37:32
* @revision: 1.0
* @purpose: 模拟同个包内的访问情况
*
***************************************************/
class T{
private String name;
public int age;
private T(){
}
T(String name){
this.getName(name);
}
private void getName(String name){
// 用传入的参数赋值给私有属性name
this.name = name;
// 在同个类里访问私有属性;前面并没有提到this的使用说明,这里小注下,它可以简单理解成类的实例的替身
System.out.println("名称是:"+this.name);
}
// default修饰的方法
void say(){
System.out.println("My Name is "+this.name);
}
}
public class TestVisit {
public static void main(String[] arg){
// new T(); 无参构造是私有的,只能在本类中调用,比如T类在构造方法调用自己的私有方法
// 有参构造不是私有的,可以同包类之间调用
T t = new T("pirates");
// 根据上行的,t不能调用私有的getName方法及name属性
//t.getName();
// 但是可以使用默认的方法
t.say();
}
}
运行结果:
名称是:pirates
My Name is pirates
结果分析:如果还不清楚结果的原因,可以自行阅读“Java起航 ---- 方法”一文中关于方法传递引用变量的思想,在此就不解释了
既已提到封装的概念,顺便分享下我找到解释为什么Java的代码会有 public static void main(String[] args){ }
jvm在试图运行一个类之前,先检查该类是否包含一个特殊方法。
1、这个方法必须是公有的,以便在任何位置都能访问得到。
2、这个方法必须是static的,因为这个方法不能依赖任何该类的实例即可运行,而非static的方法,在运行之前要先创建该类的实例对象。
3、这个方法没有返回值。和C/C++程序不一样,java的程序默认都以常态结束,所以main不需要返回值。如果要以非常态结束程序,可以用System.exit(1)。
4、这个方法必须可以接受数目不定的String类型的参数,最早并没有JavaIDE工具,方便运行者可能要附加运行参数。
如java HelloWorld jack 100,这里的jack和100就是运行参数。
为什么是String呢?因为String具有普遍性。任何字面形式都可以解释成String,而其他类型则不然(如jack就不能解释成整数或浮点数),所以用String来存储参数最合适。
而因为参数数目不限一个,所以用了数组,即String[]。在Java 1.5以后,还可以写成String...,表示数目不定。
至于参数的变量名可以任意,只要保证在方法内部按该变量名来获得参数就行了,从变量的作用角度来说,叫arguments或args当然是最合适的。
至于这个方法的名字为什么一定是main,有历史原因,因为最早的C以main函数作为程序入口,java沿用了这个历史传统。
在此谢谢作者...Dan1980
- 大小: 29 KB
分享到:
相关推荐
Educoder题目:Java面向对象 - 封装、继承和多态答案解析
共九章内容: ...第 3 章 类的封装、继承和多态 第 4 章 接口、内部类和 Java API 基础 第 5 章 异常处理 第 6 章 图形用户界面 第 7 章 多线程 第 8 章 Applet 应用程序 第 9 章 输入/输出流和文件操作
教程名称:2017最新Java基础入门与进阶全套视频课程目录:【】01.基础语法环境搭建【】02.基础语法-数据类型【】03.基础语法-运算符【】04.基础语法-选择、循环结构【】05.基础语法-方法、数组【】06.基础语法-数组...
学习过程中做的笔记,适合初学者。包括面向对象、封装、继承、多态、集合、I/O流、线程、泛型、异常和一些关键字的简单介绍
java基础_继承封装 多态,概念的梳理,对初学者很有帮助,看一遍就清楚了
JAVA高级进阶-实现ORM思想封装DBUtil工具类 大牛教你如何用mybatis的自动生成器来提高开发效率 京东架构师教你颠覆密码加密认知-不一样的加密 入职BAT必须技术微框架-webservice的wsdl, 深入学习springboot,轻松...
面向对象:Java全面支持面向对象的特性,如封装、继承和多态,使得代码更易于维护和扩展。 安全:Java提供了丰富的安全特性,如禁止指针运算、自动内存管理和异常处理机制,以减少程序错误和恶意攻击的可能性。 ...
Java编程实训 Java开发基础入门教程1-08 面向对象编程进阶(共37页).ppt Java编程实训 Java开发基础入门教程1-09 Java异常处理机制和调试(共32页).ppt Java编程实训 Java开发基础入门教程1-10 java集合框架(共27...
05 面向对象编程-封装(共21页).ppt 06 面向对象编程-继承和多态(共28页).ppt 07 面向对象编程-接口和常量(共28页).ppt 08 面向对象编程进阶(共37页).ppt 09 Java异常处理机制和调试(共32页).ppt 10 java...
Java编程实训 Java开发基础入门教程1-08 面向对象编程进阶(共37页).ppt Java编程实训 Java开发基础入门教程1-09 Java异常处理机制和调试(共32页).ppt Java编程实训 Java开发基础入门教程1-10 java集合框架(共27...
Java编程实训 Java开发基础入门教程1-08 面向对象编程进阶(共37页).ppt Java编程实训 Java开发基础入门教程1-09 Java异常处理机制和调试(共32页).ppt Java编程实训 Java开发基础入门教程1-10 java集合框架(共27...
Java编程实训 Java开发基础入门教程1-08 面向对象编程进阶(共37页).ppt Java编程实训 Java开发基础入门教程1-09 Java异常处理机制和调试(共32页).ppt Java编程实训 Java开发基础入门教程1-10 java集合框架(共27...
Java编程实训 Java开发基础入门教程1-08 面向对象编程进阶(共37页).ppt Java编程实训 Java开发基础入门教程1-09 Java异常处理机制和调试(共32页).ppt Java编程实训 Java开发基础入门教程1-10 java集合框架(共27...
Java编程实训 Java开发基础入门教程1-08 面向对象编程进阶(共37页).ppt Java编程实训 Java开发基础入门教程1-09 Java异常处理机制和调试(共32页).ppt Java编程实训 Java开发基础入门教程1-10 java集合框架(共27...
Java编程实训 Java开发基础入门教程1-08 面向对象编程进阶(共37页).ppt Java编程实训 Java开发基础入门教程1-09 Java异常处理机制和调试(共32页).ppt Java编程实训 Java开发基础入门教程1-10 java集合框架(共27...
Java编程实训 Java开发基础入门教程1-05 面向对象编程-封装(共21页).ppt Java编程实训 Java开发基础入门教程1-06 面向对象编程-继承和多态(共28页).ppt Java编程实训 Java开发基础入门教程1-07 面向对象编程-...
《Java后端宝典进阶版》是一本针对Java后端开发者的资源,旨在帮助他们深入学习和掌握Java后端开发的各个方面。该资源涵盖了Java后端开发的核心知识和技术,包括但不限于以下内容: Java基础知识:介绍Java语言的...
Java开发基于seetaface6的人脸识别(活体检测)的封装源码.zipJava开发基于seetaface6的人脸识别(活体检测)的封装源码.zipJava开发基于seetaface6的人脸识别(活体检测)的封装源码.zipJava开发基于seetaface6的...
│ │ MyBatis进阶.mp4 │ │ Spring JDBC(中).mp4 │ │ Tomcat安装与运行.mp4 │ │ 数据池链接.mp4 │ │ 数据访问-事务管理(中).mp4 │ │ 死锁分析与解决.mp4 │ │ │ ├─Java基础-复习...