当前位置: 首页 > news >正文

Java学习笔记三(封装)

封装概念:将数据封装在对象中,合理隐藏(private),合理暴露(public)

1 关键字

1.1 this关键字

注释:this代表当前对象

(1) 类调用自身属性方法:this

构造器:this(参数,…)

变量:this.变量名

方法:this.方法名()

public class Test {private String str = "abc";private void fun() {}public void doTest() {Test t = this();     // 构造器String s = this.str; // 变量this.fun();          // 调用方法}
}

(2) 其它类调用当前类属性方法:实例对象

对象 = new (参数,…);

对象.变量名

对象.方法名()

public class Test1 {public String str = "abc";public void fun1() {}
}class Test2 {Test1 t = new Test1(); // 外部实例化对象String s = t.str;      // 外部获取成员变量t.fun();               // 外部调用函数
}

1.2 static关键字

(1) 静态变量(类变量)

定义:public static 类型 变量名; 

public class Test1 {public static String str;
}

调用:类名.变量名; // 所有对象调用类变量共用一个值

public class Test2 {public void fn() {Test1.str;}
}

注释:成员内部类的静态属性(Jdk16支持)public class out { class in { 静态属性 } } 

public class Out {class In {public static String Str = "abc";}
}
String s = Out.In.Str;

(2) 静态方法(类方法):

注释:静态方法不能直接使用本类实例属性方法(或this关键字)(必须实例化后调用),实例方法(或this关键字)可以直接使用本类静态方法(不是必须用类名调用)

定义:public static void 方法名(){…}

public class Test1 {public static void fn() {...}
}

调用:类名.方法名();

public class Test2 {public void fn() {Test1.fn();}
}

(3) 静态代码块:static { …  }

静态代码块在类加载时调用

public class Test {static {...}
}

(4) 静态内部类

定义:public class Out { public static class in { 静态属性…  } }   // 类似静态方法

public class Out { public static class In {public static String STR = "abc";} 
} 

调用:主类.内部类 变量名 = new 主类.内部类();

Out.In in = new Out.In();

1.3 final关键字

注释:一般用 【public static final 类型 常量名 = 常量值;】 修饰常量

(1) final类:public final class 类名{…} // final修饰的类,不可被继承

(2) final属性:private final 类型 变量名; // final修饰的属性,基本类型(值不可变),引用类型(地址不可变,属性可变)

(3) final方法:public final void 方法名(){…} // fianl修饰的方法,不可被重写

(4) final参数:public void 方法名(final String str, final 类型 obj) // 方法内部基本类型(值不可变),引用类型(地址不可变,属性可变)

2 访问权限修饰符

2.1 类(访问权限修饰符)

(1) 默认类class 类名 {... }   // 类同包类可对其引用

package java.main;
class Test {...
}

java.main.Call // 同包类可引用(import, extends)Test

java.log.Log // 不同包不可引用(import, extends)Test

(2) 公开类public class 类名 {...}  // 所有的类都可对其引用

package java.main;
public class Test {...
}

java.main.Call // 同包类可引用(import, extends)Test

java.log.Log // 不同包可引用(import, extends)Test

(3) 同文件类:public class 类名 { … } class 类2{..}

同一个文件可以定义多个类,但只有一个可以用public修饰

public class Test1 {
}
class Test2{
}

2.2 [非静态]成员(访问权限修饰符)

私有(private),默认,保护(protected),公开(public)

注释:成员变量,成员方法

(1) 私有:private 类型 变量名; private 返回值 方法名(){…} // 当前类内部,自己可访问

可:java.main.Test // 类内部可使用私有变量与方法

否:java.main.Call // 同包类创建的Test对象,无法使用Test的私有属性与方法

否:java.sub.Sub(extends Test) // 子类内部及new的子类对象,无法使用Test的私有属性与方法

否:java.log.Log // 不同包类创建的Test对象,无法使用Test的私有属性与方法

(2) 默认:类型 变量名; 返回值 方法名(){…} // 同包的类可访问

可:java.main.Test // 类内部可使用默认变量与方法

可:java.main.Call // 同包类创建的Test对象,可使用Test的默认属性与方法

否:java.sub.Sub(extends Test) // 子类内部及new的子类对象,无法使用Test的默认属性与方法

否:java.log.Log // 不同包类创建的Test对象,无法使用Test的默认属性与方法

(3) 保护:protected 类型 变量名; protected 返回值 方法名(){…} // 同包类及子类可访问

可:java.main.Test // 类内部可使用保护变量与方法

可:java.main.Call // 同包类创建的Test对象,可使用Test的保护属性与方法

可:java.sub.Sub(extends Test) // 子类内部及new的子类对象,可使用Test的保护属性与方法

否:java.log.Log // 不同包类创建的Test对象,无法使用Test的保护属性与方法

(4) 公开:public 类型 变量名; public 返回值 方法名(){…} // 所有类可访问

可:java.main.Test // 类内部可使用公开变量与方法

可:java.main.Call // 同包类创建的Test对象,可使用Test的公开属性与方法

可:java.sub.Sub(extends Test) // 子类内部及new的子类对象,可使用Test的公开属性与方法

可:java.log.Log // 不同包类创建的Test对象,可使用Test的公开属性与方法

package main.java;
public class Test {private String str1; //私有String str2;         //默认protected String str3;// 保护public String str4;    //公开private void fn1() {} //私有void fn2() {}         //默认protected void fn3() {}// 保护public void fn4() {}   //公开// 类内部可以直接使用(私有,默认,包含,公开)变量与方法public void doTest1() {String s1 = this.str1;String s2 = this.str2;String s3 = this.str3;String s4 = this.str4;this.fn1();this.fn2();this.fn3();this.fn4();}// 类内部new出的类对象,可以调用对象的(私有,默认,包含,公开)变量与方法public void doTest2() {Test t = new Test();String s1 = t.str1;String s2 = t.str2;String s3 = t.str3;String s4 = t.str4;t.fn1();t.fn2();t.fn3();t.fn4();}
}
package main.java;
// 同包类new出的Test对象可以调用Test的(默认,保护,公开)变量与方法
public class Test2 {public void fn() {Test t = new Test();String s2 = t.str2;String s3 = t.str3;String s4 = t.str4;t.fn2();t.fn3();t.fn4();}
}
package main.log;import main.java.Test;public class SubTest extends Test {// Test子类可以使用 继承来的 Test(保护,公开)属性与方法public void subFn1() {String t3 = str3;String t4 = str4;fn3();fn4();}// Test的子类new出的子类可以调用 继承来的Test(保护,公开)属性与方法public void subFn3() {SubTest st = new SubTest();String t3 = st.str3;String t4 = st.str4;st.fn3();st.fn4();}// Test的子类new出的Test类,只可以调用 Test(公开)属性与方法public void subFn2() {Test t = new Test();String s4 = t.str4;t.fn4();}
}
package main.log;import main.java.Test;public class Log {// 不同包的类new出的Test对象,只能调用Test(公开)属性与方法public void fn() {Test t = new Test();String s4 = t.str4;t.fn4();}
}

2.3 [静态]成员(访问权限修饰符)

私有(private),默认,保护(protected),公开(public)

package main.java;public class Test {private static String str1; //私有static String str2;         //默认protected static String str3;// 保护public static String str4;    //公开private static void fn1() {} //私有static void fn2() {}         //默认protected static void fn3() {}// 保护public static void fn4() {}   //公开// Test可以使用 Test自身的(私有,默认,保护,公开)静态属性与方法public void doTest1() {String s1 = Test.str1;String s2 = Test.str2;String s3 = Test.str3;String s4 = Test.str4;Test.fn1();Test.fn2();Test.fn3();Test.fn4();}
}
package main.java;public class Test2 {// 同包的类,可以使用Test(默认,保护,公开)静态属性与方法public void fn() {String s2 = Test.str2;String s3 = Test.str3;String s4 = Test.str4;Test.fn2();Test.fn3();Test.fn4();}
}
package main.log;import main.java.Test;public class SubTest extends Test {// 子类可以使用Test的(保护,公开)静态属性与方法public void subFn1() {String t3 = Test.str3;String t4 = Test.str4;Test.fn3();Test.fn4();}// 子类可以使用自身继承来的,Test的(保护,公开)静态属性与方法public void subFn2() {String t3 = SubTest.str3;String t4 = SubTest.str4;SubTest.fn3();SubTest.fn4();}
}
package main.log;import main.java.Test;public class Log {// 不同包的类,只能使用Test(公开)静态属性与方法public void fn() {String s4 = Test.str4;Test.fn4();}
}

文章转载自:

http://4AuLxFDr.Lfqtp.cn
http://wnctdT06.Lfqtp.cn
http://m8E48Uy7.Lfqtp.cn
http://i9JEM5yl.Lfqtp.cn
http://V5RfhGtb.Lfqtp.cn
http://wDs4j7lq.Lfqtp.cn
http://zAhcPySb.Lfqtp.cn
http://Pl4JD2TX.Lfqtp.cn
http://udBYZHw7.Lfqtp.cn
http://Qh5GNlL6.Lfqtp.cn
http://7i7u7ywI.Lfqtp.cn
http://IKyznneI.Lfqtp.cn
http://M93K6sOc.Lfqtp.cn
http://ftgTZPCU.Lfqtp.cn
http://d2jMiecZ.Lfqtp.cn
http://UcuOmKG7.Lfqtp.cn
http://nlxTzhqA.Lfqtp.cn
http://2kinx4ES.Lfqtp.cn
http://92MtamCx.Lfqtp.cn
http://kQQpxsZs.Lfqtp.cn
http://7wEQ8PZP.Lfqtp.cn
http://ycYHDdxR.Lfqtp.cn
http://HAhA8hxV.Lfqtp.cn
http://8xZzTe3e.Lfqtp.cn
http://Pv67BfvR.Lfqtp.cn
http://sM7RYqvn.Lfqtp.cn
http://1YxGYx7c.Lfqtp.cn
http://Wow0f2Uj.Lfqtp.cn
http://u3L67Tt4.Lfqtp.cn
http://3wyFgb29.Lfqtp.cn
http://www.dtcms.com/a/374460.html

相关文章:

  • 使用云手机能否给企业降本增效
  • Linux笔记---进程间关系与守护进程
  • 详细:虚拟机 + Linux 环境搭建 + Oracle 11.2.0 EE 安装全流程
  • 思利普科技:用BCG心冲击技术重新定义睡眠监测,掀起床垫行业智能化革命
  • 2025世界智博会,揭幕AI触手可及的科幻生活
  • 探索 CSS 3D 属性:从基础到炫酷动画案例
  • “从零到一:使用GitLab和Jenkins实现自动化CI/CD流水线”
  • 考研408《计算机组成原理》复习笔记,第六章(1)——总线概念
  • adb的常用命令
  • 设计模式:策略模式
  • 【华为OD】数字游戏
  • 分享:一种为蓝牙、WIFI、U段音频发射设备提供ARC回传数字音频桥接功能的方案
  • 【设计模式】 外观模式
  • 在 JavaScript中使用msgpack-lite 和zlib实现大数据文件的压缩和读取
  • 医疗连续体机器人模块化控制界面设计与Python库应用研究(中)
  • 【数据库】Redis详解:内存数据库与缓存之王
  • OpenCV 图像处理实战:从图像金字塔到直方图分析
  • MongoDB 安全加固:构建企业级纵深防御体系——用户权限管理与 TLS 加密配置详解
  • 为什么苹果签名经常会掉签?
  • http basic认证流程
  • Docker 存储卷(Volume)核心概念、类型与操作指南
  • 【iOS】 单例模式
  • Matlab机器人工具箱使用4 蒙特卡洛法绘制工作区间
  • 【华为OD】环中最长子串2
  • 08 docker搭建大数据集群
  • 【华为OD】微服务的集成测试
  • Tool | UI/BI类网址收录
  • 计算机视觉(opencv)——基于模板匹配的身份证号识别系统
  • 腾讯推出AI CLI工具CodeBuddy,国内首家同时支持插件、IDE和CLI三种形态的AI编程工具厂商
  • 前后端联调时出现的一些问题记录