Java面向对象--3.封装

       作为面向对象三大特征之一,封装把一个对象的属性和行为封装成一个类,把具体的业务逻辑功能实现封装成一个方法

       封装的目的是把所有的属性藏起来,仅提供公共方法对其访问,即成员变量使用private修饰,同时提供对应的get()/set()方法。

3.1 访问控制修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

  • default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

  • private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

  • public : 对所有类可见。使用对象:类、接口、变量、方法

  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

我们可以通过以下表来说明访问权限:

3.2 get()/set()方法

get()方法:直接获取成员变量的值。

set()方法:给成员变量赋值。

任何要访问类中私有成员变量的类都要通过这些get()方法和set()方法。

public class Person{
    private String name;
    private int age;

    public void setName(String n){
      name = n;
    }

    public String getName(){
      return name;
    }

    public void setAge(int a){
      age = a;
    }

    public int getAge(){
      return age;
    }

}

3.3 this关键字

this表示类实例本身,代表所在类的对象引用,指的是访问类中的成员变量,用来区分成员变量和局部变量(重名问题),常用于局部变量隐藏成员变量。

public class Person{
    private String name;
    private int age;

    public void setName(String name){
      this.name = name;
    }

    public String getName(){
      return name;
    }

    public void setAge(int age){
      this.age = age;
    }

    public int getAge(){
      return age;
    }

}

该段代码采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。

通过如下的例子说明Person类的变量怎样被访问:

public class Test{
   public static void main(String args[]){
      Person p = new Person();
      p.setName("James");
      p.setAge(20);
      
      System.out.print("Name : " + p.getName()+ " Age : "+ p.getAge());
    }
}

3.4构造方法

       当一个对象被创建时候,构造方法用来初始化该对象。构造方法和它所在类的名字相同,但构造方法没有返回值。通常会使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象。

      不管你是否自定义构造方法,所有的类都有构造方法,因为 Java 自动提供了一个默认构造方法,默认构造方法的访问修饰符和类的访问修饰符相同(类为 public,构造函数也为 public;类改为 protected,构造函数也改为 protected)。

一旦你定义了自己的构造方法,默认构造方法就会失效。

在一个类中,与类名相同的方法就是构造方法。每个类可以具有多个构造方法,但要求它们各自包含不同的方法参数。

3.4.1无参构造方法

java的默认构造方法是无参的。

Java编译器会自动创建无参构造函数,因此在类中,无参构造即使没有,我们也可省略不写。实例化对象时无需赋值。

public class Person {
    //无参构造方法
    public Person() {
    }
}
public class Test {
    public static void main(String[] args) {
        //new 实例化一个对象
        //一个类就算什么也不写,也存在一个方法,且方法名与类名相同。
        //创建对象,括号内无需赋值,没赋值的情况下,字符类型默认值为null,数值类型默认值为0
         Person p=new Person();
    }
}

3.4.2有参构造方法

public class Person {
    private int age;    // 定义私有变量
    
    // 定义有参的构造方法
    MyClass(int age) {
        this.age = age;
    }

    public void show() {
        System.out.println("我今年"+c+"岁。");
    }
}
public class Test{
    public static void main(String[] args) {

        // 调用带有一个参数的构造方法
        Person c = new Person(10);
        c.show();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超级小狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值