ToB企服应用市场:ToB评测及商务社交产业平台

标题: Java面向对象(三) [打印本页]

作者: 惊落一身雪    时间: 2022-8-25 04:08
标题: Java面向对象(三)
Java面向对象(三)


目录

六、面向对象特征之一:封装性

6.1 封装性的引入:

当我们创建一个类的对象以后,我们可以通过"对象.属性"的方式,对对象的属性进行赋值。这里,赋值操作要受到属性的数据类型和存储范围的制约。除此之外,没有其他制约条件。
但是在实际问题中,我们往往需要给属性赋值加入额外的限制条件。这个条件就不能在属性声明时体现,我们只能通过方法进行限制条件的添加。同时,我们需要避免用户再使用"对象.属性"的方式对属性进行赋值。则需要将属性声明为私有的(private)。此时,针对于属性就体现了封装性。
6.2 封装性的体现:

将类的属性xxx私有化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值
注:上面的情况只是 Java 封装性的体现之一,封装性的体现还有:
6.3 封装性的体现,需要权限修饰符来配合


6.4 总结封装性:

Java提供了4种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构在被调用时的可见性的大小
七、类的成员之三:构造器(constructor)

7.1 构造器的作用:

7.2 构造器的特征:

  1. public class PersonTest {
  2.         public static void main(String[] args) {
  3.                 //创建类的对象:new + 构造器
  4.                 Person p = new Person();
  5.                
  6.                 Person p1 = new Person("Tom");
  7.                 System.out.println(p1.name);
  8.         
  9.         Person p2 = new Person("Jay", 20);
  10.                 System.out.println(p2.name + " " + p2.age);
  11.                
  12.         }
  13. }
  14. class Person{
  15.         //属性
  16.         String name;
  17.         int age;
  18.        
  19.         //构造器(重载)
  20.         public Person(){
  21.                 System.out.println("Person().....");
  22.         }
  23.        
  24.         public Person(String n){
  25.                 name = n;
  26.                
  27.         }
  28.        
  29.         public Person(String n,int a){
  30.                 name = n;
  31.                 age = a;
  32.         }
  33. }
复制代码
7.3 注意:

7.4 属性赋值先后顺序:

  1. public class UserTest {
  2.         public static void main(String[] args) {
  3.                
  4.         User u = new User();       
  5.                 System.out.println(u.age);
  6.                
  7.                 User u1 = new User(2);
  8.                 System.out.println(u1.age);
  9.                
  10.         u1.setAge(3);
  11.                 System.out.println(u1.age);
  12.         }
  13. }
  14. class User{
  15.         String name;        // 默认初始化
  16.         int age = 1;        // 显式初始化
  17.        
  18.         public User(){
  19.                
  20.         }
  21.        
  22.         public User(int a){                // 构造器中初始化
  23.                 age = a;
  24.         }
  25.        
  26.         public void setAge(int a){
  27.                 age = a;
  28.         }
  29.        
  30. }
  31. /*        输出:
  32.         1
  33.         2
  34.         3
  35. */
复制代码
Java 内存分析:

对于 u1 对象的 age 属性:首先是默认初始化为 0 ,然后是显式初始化将 0 改为 1 ,接着是构造器初始化将 1 改为 2 ,最后是通过通过“对象.属性“或“对象.方法”的方式赋值为 3。
八、JavaBean(拓展)

  1. public class JavaBean {
  2.         private String name; // 属性一般定义为private
  3.         private int age;
  4.         public JavaBean() {
  5.         
  6.         }
  7.         public int getAge() {
  8.                 return age;
  9.         }
  10.         public void setAge(int a) {
  11.                 age = a;
  12.         }
  13.         public String getName() {
  14.                 return name;
  15.         }
  16.         public void setName(String n) {
  17.                 name = n;
  18.         }
  19. }
复制代码
九、UML类图


十、this 关键字

10.1 this 关键字的使用:

10.2 this 修饰属性和方法:

10.3 this 调用构造器

  1. //        一个例子:
  2. public class PersonTest {
  3.         public static void main(String[] args) {
  4.                
  5.                 Person p1 = new Person();
  6.                
  7.                 p1.setAge(1);
  8.                 System.out.println(p1.getAge());
  9.                
  10.                 p1.eat();
  11.                
  12.                 System.out.println();
  13.                
  14.                 Person p2 = new Person("Jerry",20);
  15.                 System.out.println(p2.getAge());
  16.                
  17.         }
  18. }
  19. class Person{
  20.        
  21.         private String name;
  22.         private int age;
  23.        
  24.        
  25.         public Person(){
  26.                
  27.         String info = "Person初始化时,需要考虑如下的1,2,3,4...(共40行代码)";
  28.                 System.out.println(info);
  29.         }
  30.        
  31.         public Person(String name){
  32.                 this();
  33.                 this.name = name;
  34.                
  35.         }
  36.        
  37.         public Person(int age){
  38.                 this();
  39.                 this.age = age;
  40.                
  41.         }
  42.        
  43.         public Person(String name,int age){
  44.                 this(age);
  45.                 this.name = name;
  46.                 //Person初始化时,需要考虑如下的1,2,3,4...(共40行代码)
  47.         }
  48.        
  49.         public void setName(String name){
  50.                 this.name = name;
  51.         }
  52.         public String getName(){
  53.         return name;
  54.         //        省略了this,相当于return this.name;
  55.         }
  56.         public void setAge(int age){
  57.                 this.age = age;
  58.         }
  59.         public int getAge(){
  60.                 return age;
  61.         //        省略了this,相当于return this.age;
  62.         }
  63.        
  64.         public void eat(){
  65.                 System.out.println("人吃饭");
  66.                 this.study();
  67.         }
  68.         public void study(){
  69.                 System.out.println("人学习");
  70.         }
  71.        
  72. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4