• 人生苦短我学Java-7-面向对象三大特性之封装及构造器/this等关键字使用


    一、封装

    面向对象三大特性之封装。

    1、封装性的体现:属性私有化/不对外暴露的私有方法/单例模式等等

    可将属性数据声明为私有的:private,再通过封装提供公共的:public实现对属性的操作,目的:

    • 隐藏一个类中不需要对外提供的实现细节;
    • 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,
    • 限制对属性的不合理操作;
    • 便于修改,增强代码的可维护性;

    如下实现:①setAge对外age属性进行操作;②getAge实现对外age的查询;但它的属性是私有的,实现属性的保护;

    package com.object1226;
    
    /*
    @USER PPL-泡泡龙 or 广深小龙
    @date 2020-12-26 22:42
    */
    
    public class AnimalTest {
        public static void main(String[] args) {
            Animal ani = new Animal();
            ani.setAge(10);
    //        System.out.println(ani.age);
    
            // 私有的,查,独立封装一个get方法
            System.out.println(ani.getAge());
        }
    }
    
    class Animal {
        private int age;
    
        public void setAge(int updateAge) {
            if (updateAge >= 0 && updateAge % 2 == 0) {
                age = updateAge;
            } else {
                age = 0;
                System.out.println("年龄输入必须为正数!");
            }
        }
    
        public int getAge() {
            if (age >= 0 && age % 2 == 0) {
                return age;
            } else {
                age = 0;
                System.out.println("已默认为:0");
                return age;
            }
        }
    }

    2、四种权限修饰符

    封装性的体现,需要权限修饰符来配合:

    private、缺省(默认的)、protected、public

    ①四种权限都可以修饰:属性、方法、构造器、内部类

    ②修饰类,只能使用:缺省(默认)、public

    二、构造器

    1、也叫构造方法,但和方法是不一样的,构造器方法的作用:

    • 创建对象
    • 初始化对象的信息

    方法是通过new对象后,调用方法;但构造器是在造对象的时候直接运行了。

    存在多个重名的构造器,那么就是构造器的重载。如下例子:

    类名称为:Person   再写一个构造方法名称为:Person。在一个类中,至少有一个构造器方法。注:构造方法不能有关键字:void (不然真的是个类的方法名了)

    package com.object1223;
    
    /*
    @USER PPL-泡泡龙 or 广深小龙
    @date 2020-12-27 14:22
    */
    
    public class PersonTest {
        public static void main(String[] args) {
    
            // 创建类的对象,默认是空参数
    //        Person p = new Person();
    
            // 在new的时候传入参数,初始化属性
            Person p = new Person("PPL");
            System.out.println(p.GetName());
        }
    }
    
    class Person {
        String name;
        // 存在多个重名的构造器,那么就是构造器的重载
        // 构造器1
        public Person(String str) {
            name = str;
        }
    
        // 构造器2
        public Person() {
            System.out.println("构造器2");
        }
    
        //方法
        public String GetName() {
            return name;
        }
    }

    2、属性赋值的顺序:

    ①默认初始化

    ②显示初始化

    ③构造器初始化

    ④通过对象的方法或对象的属性的方式初始化;

    3、this关键字的使用

    this可以修饰:属性、方法、构造器

    特殊情况下,如果方法的形参和类的属性同名时,我们必须显式使用this.变量,表名此属性为类的属性(形参和类属性重名下,用this声明为类的变量)

    this关键字属性调用,如下例子:

    package com.object1223;
    
    /*
    @USER PPL-泡泡龙 or 广深小龙
    @date 2020-12-27 15:32
    */
    
    public class ThisTest {
        public static void main(String[] args) {
            Person1 p1 = new Person1();
            p1.setName("PPL");
            System.out.println(p1.getName());
        }
    }
    
    class Person1 {
        String name;
    
        public void setName(String name) {
            name = name;        // 方法的形参与类的属性重名的情况下,又想重名咋办?
            this.name = name;   // 可以使用this关键字,声明为类的属性;
        }
    
        public String getName() {
            return name;
        }
    }

    this关键字构造器中调用,如下例子:

    • 类的构造器中调用:可以使用this(形参列表),进行调用;
    • 类的构造器中不能调用自己本身,且最多只能调一个,不能调多个;

    构造器3调用构造器2,构造器2调用构造器1。

    package com.object1223;
    
    /*
    @USER PPL-泡泡龙 or 广深小龙
    @date 2020-12-27 15:54
    */
    
    public class ThisC {
        public static void main(String[] args) {
            ThisCTest t = new ThisCTest("PPL", 18);
            System.out.println(t.getAge());
            System.out.println(t.getName());
        }
    }
    
    class ThisCTest {
        private String name;
        private int age;
    
        // 构造器1
        public ThisCTest() {
            System.out.println("创建对象初始化:正在初始化中...");
        }
    
        // 构造器2
        public ThisCTest(String name) {
            this();         // this(形参),既调用:构造器1
            this.name = name;
        }
    
        // 构造器3
        public ThisCTest(String name, int age) {
            this(name);     // this(形参),既调用:构造器2
            this.age = age;
        }
    
        public int getAge() {
            return age;
        }
    
        public String getName() {
            return name;
        }
    }

    4、package关键字的使用 

    • 为了更好的实现项目中类的管理,提供包的概念(package)
    • 使用package声明类或者接口所属的包,声明在首行(类似Python的模块库导入)如:package com.object1223;
    • 每一个. 表示一个文件的层级,同一个包下,不能命名同名的接口、类。不同的包下,可以命名同名的接口、类。

     5、import关键字的使用 

    • 为使用定义在不同包中的Java类,需用import语句来引入指定包层次下所需要的类
    • 或全部类(.*)。import语句告诉编译器到哪里去寻找类。
    • 语法格式:import 包名. 类名; 

    在IDEA中也挺方便,如果要使用哪个包,就直接写会自动导入,如:

    import java.util.Scanner;

    MVC设计模式

    ①model 模型层:主要处理数据

    ②view 视图层:显示数据

    ③controller 控制层:处理业务逻辑

     感谢尚硅谷在B站开源教学视频提供学习,欢迎来大家QQ交流群一起学习:482713805

  • 相关阅读:
    vue自定义select组件
    基于better-scroll封装一个上拉加载下拉刷新组件
    vue自定义tap指令
    vue实现分页器(仿element)
    js异步队列之理解
    Element源码阅读(2)
    Element源码阅读(1)
    unity3d模仿魔兽世界鼠标对游戏操作
    unity3d制作小地图(MiniMap)的简单Demo
    利用unity3d自带的CharacterController包制作第一人称控制模型的简单Demo
  • 原文地址:https://www.cnblogs.com/gsxl/p/14181697.html
Copyright © 2020-2023  润新知