ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2020-12-27 19:04:18  阅读:177  来源: 互联网

标签:Java name age 构造 苦短 我学 属性 public String


一、封装

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

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

标签:Java,name,age,构造,苦短,我学,属性,public,String
来源: https://www.cnblogs.com/gsxl/p/14181697.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有