如何将访问修饰符和封装概念融合为一个长尾?

2026-04-10 09:042阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1766个文字,预计阅读时间需要8分钟。

如何将访问修饰符和封装概念融合为一个长尾?

1. 访问修饰符 1.1 基本介绍 278 java 提供四种访问控制修饰符,用于控制方法和属性(成员变量)的访问权限: 1) 公开级别:使用 public 修饰,对外公开,任何类都可以访问。 2) 保护级别:使用 protected 修饰,对同一包内的类和子类公开,对外部类则不可访问。

1. 访问修饰符

1.1 基本介绍 278

java 提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围):

1) 公开级别:用 public 修饰,对外公开

2) 受保护级别:用 protected 修饰,对子类和同一个包中的类公开

3) 默认级别:没有修饰符号,向同一个包的类公开.

4) 私有级别:用 private 修饰,只有类本身可以访问,不对外公开.

1.2 注意事项 279

在A类中定义不同的属性和方法

如何将访问修饰符和封装概念融合为一个长尾?

package com.stulzl.test41; public class A { //四个属性,分别使用不同的访问修饰符来修饰 public int n1=100; protected int n2=200; int n3=300; private int n4=400; //方法 public void m1() { //在同一类中,可以访问 public protected 默认 private 修饰属性和方法 System.out.println("n1="+n1+" n2="+n2+" n3="+n3+" n4="+n4); } //方法的修饰和属性一样 protected void m2(){} void m3(){} private void m4(){} //在同一类中,可以访问 public protected 默认 private 修饰属性和方法 public void hi() { m1(); m2(); m3(); m4(); } }

在B类中引用A类中的属性和方法

package com.stulzl.test41; public class B { public void say() { A a = new A(); //在同一个包下,可以访问 public , protected 和 默认修饰属性或方法,不能访问 private 属性或方法 System.out.println("n1="+a.n1+"n2="+a.n2+"n3="+a.n3); //在同一个包下,可以访问 public , protected 和 默认修饰属性或方法,不能访问 private 属性或方法 a.m1(); a.m2(); a.m3(); } }

在Test41中运行,验证(同类)(同包)不同属性的区别,看看能否输出

package com.stulzl.test41; public class Test41 { public static void main(String[] args) { A a = new A();//100 200 300 400//测试同类 a.m1(); B b = new B();//100 200 300//测试同胞 b.say(); } }

在不同包引用A类中的属性和方法

package com.stulzl.pkg; import com.stulzl.test41.A; public class Test { public static void main(String[] args) { A a = new A(); //在不同包下可以访问public修饰的属性或者方法 //但不能访问protected,默认,private修饰的属性或者方法 System.out.println("n1="+a.n1);//100 //验证不同包 //在不同包下可以访问public修饰的属性或者方法 //但不能访问protected,默认,private修饰的属性或者方法 a.m1(); } }

2. 基本介绍

面向对象编程有三大特征:封装、继承和多态。

3. 封装(encapsulation) 280

4. 封装的理解和好处 280

5. 封装的实现步骤(三步)281

6. 快速入门 282

那么在 java 中如何实现这种类似的控制呢?

请大家看一个小程序不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认 年龄, 必须在 1-120, 年龄, 工资不能直接查看 , name 的长度在 2-6 字符 之间

package com.stulzl.test42; import java.util.Scanner; //请大家看一个小程序不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。 // 年龄合理就设置,否则给默认 年龄, 必须在 1-120, // 年龄, 工资不能直接查看 ,name 的长度在 2-6 字符 之间 public class Test42 { public static void main(String[] args) { Person person = new Person(); person.setName("jack"); person.setAge(30); person.setSalary(30000); //输出信息 System.out.println(person.info()); System.out.println("salary="+person.getSalary()); } } class Person { public String name;//名字公开 private int age;//年龄私有 private int salary;//工资私有 //自己写 setXxx 和 getXxx 太慢,我们使用快捷键 //然后根据要求来完善我们的代码 public String getName() { return name; } //name 的长度在 2-6 字符 之间 public void setName(String name) { //假如对数据的校验 if(name.length()>=2 && name.length()<=6) { this.name=name; } else { System.out.println("名字长度不对,给出默认名"); this.name = "无名氏"; } } public int getAge() { return age; } //年龄, 必须在 1-120 public void setAge(int age) { //设置验证 if(age>=1 && age<=120) { this.age=age; } else { System.out.println("你设置的年龄不对必须在 1-120,先给一个默认年龄"); this.age = 18;//给一个默认年龄 } } //工资不能直接查看 public int getSalary() { //增加对当前对当前对象的权限判定 Scanner scanner = new Scanner(System.in); System.out.println("查看工资请输入密码"); String key = scanner.next(); if(key.equals("123")) { return salary; } else { System.out.println("密码错误"); return -1;//错误返回-1 } } public void setSalary(int salary) { this.salary = salary; } //写一个方法返回信息 public String info() { return "信息为 name="+name+" age="+age; } }

6.2 封装和构造器结合

补充上题

package com.stulzl.test42; import java.util.Scanner; public class Test42 { public static void main(String[] args) { Person person = new Person(); person.setName("jack"); person.setAge(30); person.setSalary(30000); //输出信息 System.out.println(person.info()); System.out.println("salary="+person.getSalary()); //使用构造器输出 System.out.println("=====smith信息====="); Person person1 = new Person("smith",80,20000); System.out.println(person1.info()); System.out.println("salary="+person1.getSalary()); } } class Person { public String name;//名字公开 private int age;//年龄私有 private int salary;//工资私有 //无参构造器 public Person() {//这个无参构造器是输出jack信息的,因为宅main中jack的person()没有传值,而我们又写了一个 // 有参构造器为了输出smith信息,但是Jack的person()无传参和smith的person1()有传参, // 防止jack和smith在输出信息而是用到构造器时矛盾,所以接一个无参构造器给jack使用 } //三个属性的构造器 public Person(String name, int age, int salary) { // this.name = name; // this.age = age; // this.salary = salary; //我们可以将set方法写在构造器中,这样仍然可以验证 setName(name); setAge(age); setSalary(salary); } //自己写 setXxx 和 getXxx 太慢,我们使用快捷键 //然后根据要求来完善我们的代码 public String getName() { return name; } //name 的长度在 2-6 字符 之间 public void setName(String name) { //假如对数据的校验 if(name.length()>=2 && name.length()<=6) { this.name=name; } else { System.out.println("名字长度不对,给出默认名"); this.name = "无名氏"; } } public int getAge() { return age; } //年龄, 必须在 1-120 public void setAge(int age) { //设置验证 if(age>=1 && age<=120) { this.age=age; } else { System.out.println("你设置的年龄不对必须在 1-120,先给一个默认年龄"); this.age = 18;//给一个默认年龄 } } //工资不能直接查看 public int getSalary() { //增加对当前对当前对象的权限判定 Scanner scanner = new Scanner(System.in); System.out.println("查看工资请输入密码"); String key = scanner.next(); if(key.equals("123")) { return salary; } else { System.out.println("密码错误"); return -1;//错误返回-1 } } public void setSalary(int salary) { this.salary = salary; } //写一个方法返回信息 public String info() { return "信息为 name="+name+" age="+age; } }

本文共计1766个文字,预计阅读时间需要8分钟。

如何将访问修饰符和封装概念融合为一个长尾?

1. 访问修饰符 1.1 基本介绍 278 java 提供四种访问控制修饰符,用于控制方法和属性(成员变量)的访问权限: 1) 公开级别:使用 public 修饰,对外公开,任何类都可以访问。 2) 保护级别:使用 protected 修饰,对同一包内的类和子类公开,对外部类则不可访问。

1. 访问修饰符

1.1 基本介绍 278

java 提供四种访问控制修饰符号,用于控制方法和属性(成员变量)的访问权限(范围):

1) 公开级别:用 public 修饰,对外公开

2) 受保护级别:用 protected 修饰,对子类和同一个包中的类公开

3) 默认级别:没有修饰符号,向同一个包的类公开.

4) 私有级别:用 private 修饰,只有类本身可以访问,不对外公开.

1.2 注意事项 279

在A类中定义不同的属性和方法

如何将访问修饰符和封装概念融合为一个长尾?

package com.stulzl.test41; public class A { //四个属性,分别使用不同的访问修饰符来修饰 public int n1=100; protected int n2=200; int n3=300; private int n4=400; //方法 public void m1() { //在同一类中,可以访问 public protected 默认 private 修饰属性和方法 System.out.println("n1="+n1+" n2="+n2+" n3="+n3+" n4="+n4); } //方法的修饰和属性一样 protected void m2(){} void m3(){} private void m4(){} //在同一类中,可以访问 public protected 默认 private 修饰属性和方法 public void hi() { m1(); m2(); m3(); m4(); } }

在B类中引用A类中的属性和方法

package com.stulzl.test41; public class B { public void say() { A a = new A(); //在同一个包下,可以访问 public , protected 和 默认修饰属性或方法,不能访问 private 属性或方法 System.out.println("n1="+a.n1+"n2="+a.n2+"n3="+a.n3); //在同一个包下,可以访问 public , protected 和 默认修饰属性或方法,不能访问 private 属性或方法 a.m1(); a.m2(); a.m3(); } }

在Test41中运行,验证(同类)(同包)不同属性的区别,看看能否输出

package com.stulzl.test41; public class Test41 { public static void main(String[] args) { A a = new A();//100 200 300 400//测试同类 a.m1(); B b = new B();//100 200 300//测试同胞 b.say(); } }

在不同包引用A类中的属性和方法

package com.stulzl.pkg; import com.stulzl.test41.A; public class Test { public static void main(String[] args) { A a = new A(); //在不同包下可以访问public修饰的属性或者方法 //但不能访问protected,默认,private修饰的属性或者方法 System.out.println("n1="+a.n1);//100 //验证不同包 //在不同包下可以访问public修饰的属性或者方法 //但不能访问protected,默认,private修饰的属性或者方法 a.m1(); } }

2. 基本介绍

面向对象编程有三大特征:封装、继承和多态。

3. 封装(encapsulation) 280

4. 封装的理解和好处 280

5. 封装的实现步骤(三步)281

6. 快速入门 282

那么在 java 中如何实现这种类似的控制呢?

请大家看一个小程序不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。年龄合理就设置,否则给默认 年龄, 必须在 1-120, 年龄, 工资不能直接查看 , name 的长度在 2-6 字符 之间

package com.stulzl.test42; import java.util.Scanner; //请大家看一个小程序不能随便查看人的年龄,工资等隐私,并对设置的年龄进行合理的验证。 // 年龄合理就设置,否则给默认 年龄, 必须在 1-120, // 年龄, 工资不能直接查看 ,name 的长度在 2-6 字符 之间 public class Test42 { public static void main(String[] args) { Person person = new Person(); person.setName("jack"); person.setAge(30); person.setSalary(30000); //输出信息 System.out.println(person.info()); System.out.println("salary="+person.getSalary()); } } class Person { public String name;//名字公开 private int age;//年龄私有 private int salary;//工资私有 //自己写 setXxx 和 getXxx 太慢,我们使用快捷键 //然后根据要求来完善我们的代码 public String getName() { return name; } //name 的长度在 2-6 字符 之间 public void setName(String name) { //假如对数据的校验 if(name.length()>=2 && name.length()<=6) { this.name=name; } else { System.out.println("名字长度不对,给出默认名"); this.name = "无名氏"; } } public int getAge() { return age; } //年龄, 必须在 1-120 public void setAge(int age) { //设置验证 if(age>=1 && age<=120) { this.age=age; } else { System.out.println("你设置的年龄不对必须在 1-120,先给一个默认年龄"); this.age = 18;//给一个默认年龄 } } //工资不能直接查看 public int getSalary() { //增加对当前对当前对象的权限判定 Scanner scanner = new Scanner(System.in); System.out.println("查看工资请输入密码"); String key = scanner.next(); if(key.equals("123")) { return salary; } else { System.out.println("密码错误"); return -1;//错误返回-1 } } public void setSalary(int salary) { this.salary = salary; } //写一个方法返回信息 public String info() { return "信息为 name="+name+" age="+age; } }

6.2 封装和构造器结合

补充上题

package com.stulzl.test42; import java.util.Scanner; public class Test42 { public static void main(String[] args) { Person person = new Person(); person.setName("jack"); person.setAge(30); person.setSalary(30000); //输出信息 System.out.println(person.info()); System.out.println("salary="+person.getSalary()); //使用构造器输出 System.out.println("=====smith信息====="); Person person1 = new Person("smith",80,20000); System.out.println(person1.info()); System.out.println("salary="+person1.getSalary()); } } class Person { public String name;//名字公开 private int age;//年龄私有 private int salary;//工资私有 //无参构造器 public Person() {//这个无参构造器是输出jack信息的,因为宅main中jack的person()没有传值,而我们又写了一个 // 有参构造器为了输出smith信息,但是Jack的person()无传参和smith的person1()有传参, // 防止jack和smith在输出信息而是用到构造器时矛盾,所以接一个无参构造器给jack使用 } //三个属性的构造器 public Person(String name, int age, int salary) { // this.name = name; // this.age = age; // this.salary = salary; //我们可以将set方法写在构造器中,这样仍然可以验证 setName(name); setAge(age); setSalary(salary); } //自己写 setXxx 和 getXxx 太慢,我们使用快捷键 //然后根据要求来完善我们的代码 public String getName() { return name; } //name 的长度在 2-6 字符 之间 public void setName(String name) { //假如对数据的校验 if(name.length()>=2 && name.length()<=6) { this.name=name; } else { System.out.println("名字长度不对,给出默认名"); this.name = "无名氏"; } } public int getAge() { return age; } //年龄, 必须在 1-120 public void setAge(int age) { //设置验证 if(age>=1 && age<=120) { this.age=age; } else { System.out.println("你设置的年龄不对必须在 1-120,先给一个默认年龄"); this.age = 18;//给一个默认年龄 } } //工资不能直接查看 public int getSalary() { //增加对当前对当前对象的权限判定 Scanner scanner = new Scanner(System.in); System.out.println("查看工资请输入密码"); String key = scanner.next(); if(key.equals("123")) { return salary; } else { System.out.println("密码错误"); return -1;//错误返回-1 } } public void setSalary(int salary) { this.salary = salary; } //写一个方法返回信息 public String info() { return "信息为 name="+name+" age="+age; } }