• Java基础笔记(十四)——封装


    封装(好比ATM机)

    将类的某些信息隐藏在类内部,不允许外部程序直接访问(隐藏对象的信息),通过该类提供的方法来实现对隐藏信息的操作和访问(留出访问的接口)。

    特点:

    1.只能通过规定的方法访问数据。

    2.隐藏类的实例细节,方便修改和实现。

    实现步骤:

    1.修改属性的可见性——设为private。

    2.创建getter/setter方法——设为public,用于属性的读写(只读属性(无法修改)/只写属性(无法获取))。

    3.在getter/setter方法中加入属性控制语句——对属性值的合法性进行判断。

    封装前

    public class Dog {
        int age;
    }
    
    public class DogTest {
        public static void main(String[] args){
            Dog d=new Dog();
            d.age=3;
            System.out.println("年龄:"+d.age);
        }
    }
    //运行结果
    昵称:3

    封装后

    public class Dog {
        private int age;
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            if(age<0){
                System.out.println("输入错误");
            }else
                this.age = age;
        }
    }
    
    public class DogTest {
        public static void main(String[] args){
            Dog d=new Dog();
            d.setAge(3);
            System.out.println("年龄:"+d.getAge());
            Dog d1=new Dog();
            d1.setAge(-3);
            System.out.println("年龄"+d1.getAge());//因为没有赋值成功,所以值为默认初始值0
            Dog d2=new Dog();
            d1.setAge(-5);
            if(d1.getAge()==0)  //简单地加个判断处理
                return;
            System.out.println("年龄"+d1.getAge());
        }
    }
    
    //运行结果
    年龄:3
    输入错误
    年龄0
    输入错误

     用带参构造函数给对象的属性赋值

    public class Dog {
        private int age;
        public Dog(int age){
            this.setAge(age);   //这里若用this.age=age;则不能判断是否输入错误
        }
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            if(age<0){
                System.out.println("输入错误");
            }else
                this.age = age;
        }
    }
    
    public class DogTest {
        public static void main(String[] args){
            Dog d=new Dog(3);
            if(d.getAge()==0)
                return;
            System.out.println("年龄:"+d.getAge());
    
            Dog d1=new Dog(-3);
            if(d1.getAge()==0)
                return;
            System.out.println("年龄"+d1.getAge());
        }
    }
    
    //运行结果
    年龄:3
    输入错误

     包

    作用:

    1.提供多层命名空间,解决命名冲突,通过使用package,使处于不同package的类可以存在相同的名字(因为处在不同的文件夹下)。

    2.对类按功能分类,使项目的组织更加清晰。当开发一个有非常多的类的项目时,如果不使用package对类进行分类,而是把所有类都放在一个package下,这样的代码不仅可读性差,而且可维护性也不好,会严重影响开发效率。

    定义包:

    语法:package 包名;  

    (1)必须放在Java源文件中的第一行

    (2)一个Java源文件中只能有一个package语句

    (3)包名全部英文小写

    (4)命名方式:域名倒序+模块+功能

    导入包:

    语法:import  包名.类名

    例:

    导入util包中全部类:

    import java.util.*;

    导入包中指定类:

    import java.util.Scanner;

    常用系统包:

    java.lang   包含java语言基础的类 (此包不需要显式地导入)

    java.util     包含java语言中各种工具类

    java.io       包含输入、输出相关功能的类

  • 相关阅读:
    网络与通信面试
    拥塞控制
    POSIX
    操作系统面试
    为什么大家都用变量"i"?
    shape与sprite和movieclip的区别
    AS3之麦克风接口【flash.media.Microphone 类】
    Flex 入门之垃圾回收机理
    Flash Player重绘
    时间效率,Timer和EnterFrame在FP 10.1之后测试和建议
  • 原文地址:https://www.cnblogs.com/tendo/p/10485796.html
Copyright © 2020-2023  润新知