Java面向对象(三):封装

封装

封装的概念:

  • 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问。

好处:

  • (1)只能通过规定的方法访问数据
  • (2)隐藏类的实例细节,方便修改和实现。

封装的实现步骤

  • (1)修改属性的可见性设为(private)
  • (2)创建getter/setter方法(用于属性的读写)(通过这两种方法对数据进行获取和设定,对象通过调用这两种发方法实现对数据的读写)
  • (3)在getter/setter方法中加入属性控制语句(对属性值的合法性进行判断)

修饰符

private、public、默认、protected。
四种修饰符可以修饰:方法、属性、构造器、内部类。
在这里插入图片描述

  • private私有的关键字,通过private修饰的成员(方法和变量)就只能在本类中使用,在其他类中不可以使用。
  • private提倡高内聚低耦合,把细节隐藏,提供开放的接口给外部使用。高内聚:隐藏程序实现的细节,避免外界的干涉。低耦合:对外部暴露一些方法,提供为外部使用。
  • 自动生成get/set方法,快捷键:Alt+Shift+s,Generate Getters and Getters…
  • 其他:格式化代码快捷键:Ctrl+Shift+f,也是当前电脑的繁体字切换快捷键

一、构造器

特点:
1.与类相同的名称
2.没有返回值
3.可以重载

注意:在构造方法里不含返回值的概念不同于“void”,加了“void”那就不是构造方法了,就变成一个普通的方法,需要手动去调用才可以使用。

作用:用来初始化类的,当创建类的实例的时候,构造方法会自动调用。只要new出对象就会自动调用构造方法。

默认构造方法:如果一个类没有写构造方法,在编译的时候,编译器会分配一个空的构造方法,如果你写了一个或者多个编译器不会给默认的构造方法。

构造方法的重载:和普通方法的重载规则是一致的。方法名一样,参数列表不同。

二、关键字this

this:代表是当前对象

扩展:类是不能直接使用的,只能通过new创建一个对象,才可以使用。this指向的是将来需要创建(new)的对象。

用法

1.在类本身的方法或构造器调用,引用该类的成员变量或成员方法。

2.this()表示的是显示调用重载的构造器。注意:必须放在构造器中的第一行。

3.将当前对象作为参数传递给其他方法或构造器。

三、package关键字

包的声明:创建包,包在window系统中就是一个文件夹,linux系统下就是目录。

包的命名规则:

1.一般为小写

2.一般为公司的域名的逆序+项目名称+项目的模块名称+子模块名称
如:erp系统包名结构:com.baidu.erp.service.impl

3.类名相同不能在同一个包中,可以位于不同的包中,类的首字母通常是大写的

Java中的包
在这里插入图片描述

四、import关键字

注意事项:

  • 1.在java中导包可能会有多个不同的包有同样的方法,
    如: List 有java.awt.List 和java.util.List
    Date 有java.util.Date 和 java.sql.Date
  • 2.package 关键字位于第一行代码,import不能放在其前面
  • 3.导入util包中的所有类(接口等),但是不包括其子包的类

五、项目的分层结构

总体四层,视图层(view)= =》业务逻辑层(***Service)= =》数据持久层(***Dao)= =》数据库管理系统(DBMS)

在这里插入图片描述
分层结构就是封装的一个表现,也是我们学习代码的一个重要思想,所以不要轻视封装,做为java面向对象三大特性之首,肯定是有他的道理的,封装理解不难,可是实际开发中怎么去使用,这就需要有一定的经验累积才能做得更好。
这里直接给代码自己去理解一下,然后自己完成相应的题目。

== 项目案例一==
 1.根据下表,开发用户类(User类):
在这里插入图片描述
 2.开发用户类的Dao开发(UserDao类)
完成用户的增删改查等功能。
 3.开发UserService类,调用Dao类,完成用户的操作功能。

import java.util.Date;

/**
 * 
 * @Description 用户类
 * @author G.TQ
 * @version 
 * @date Dec 23, 20202:40:04 PM
 *
 */
public class User {
    
    
	private String userId;
	
	private String userName;
	
	private String password;
	
	private String contactTel;
	
	private String email;
	
	private Date createTime;

	public String getUserId() {
    
    
		return userId;
	}

	public void setUserId(String userId) {
    
    
		this.userId = userId;
	}

	public String getUserName() {
    
    
		return userName;
	}

	public void setUserName(String userName) {
    
    
		this.userName = userName;
	}

	public String getPassword() {
    
    
		return password;
	}

	public void setPassword(String password) {
    
    
		this.password = password;
	}

	public String getContactTel() {
    
    
		return contactTel;
	}

	public void setContactTel(String contactTel) {
    
    
		this.contactTel = contactTel;
	}

	public String getEmail() {
    
    
		return email;
	}

	public void setEmail(String email) {
    
    
		this.email = email;
	}

	public Date getCreateTime() {
    
    
		return createTime;
	}

	public void setCreateTime(Date date) {
    
    
		this.createTime = date;
	}
}

/**
 * 
 * @Description 用户Dao类:Dao(数据访问对象)data access object,也就是操作数据库
 * @author G.TQ
 * @version 
 * @date Dec 23, 20202:38:32 PM
 *
 */
public class UserDao {
    
    

	//完成用户的增删改查功能:(CRUD操作)create read update delete
	
	//添加用户
	public void saveUser(User user) {
    
    
		System.out.println("保存用户信息成功:"+user.getUserName());
	}
	
	//删除用户信息
	public void delUserByUserId(String userId) {
    
    
		System.out.println("删除用户成功:"+userId);
	}
	//修改用户
	public void modifyUser(User user) {
    
    
		System.out.println("修改信息成功:"+user.getUserName());
	}
	
	//查询用户
	public User loadUserByUserId(String userId) {
    
    
		User user = new User();
		user.setUserId(userId);
		return user;
	}
	
	
}
public class UserSerivce {
    
    

	private UserDao userDao;

	public UserDao getUserDao() {
    
    
		return userDao;
	}

	public void setUserDao(UserDao userDao) {
    
    
		this.userDao = userDao;
	}
	
	//增加用户
	public void saveUser(User user) {
    
    
		userDao.saveUser(user);
	}
	
	//删除用户
	public void delUser(String userId) {
    
    
		userDao.delUserByUserId(userId);
	}
	
	//修改用户
	public void modifyUser(User user) {
    
    
		userDao.modifyUser(user);
	}
	
	//查询用户
	public User findUserById(String userId) {
    
    
		return userDao.loadUserByUserId(userId);
	}

}
import java.util.Date;

public class UserTest {
    
    

	public static void main(String[] args) {
    
    
		// 用户的CRUD操作
		
		UserSerivce userSerivce = new UserSerivce();
		
		//匿名对象
		userSerivce.setUserDao(new UserDao());
		
		User user = new User();
		user.setUserId("u1001");
		user.setUserName("系统管理员");
		user.setPassword("123456");
		user.setContactTel("10086");
		user.setEmail("[email protected]");
		user.setCreateTime(new Date());
		
		userSerivce.saveUser(user);
		
		userSerivce.delUser("u1002");
		
		userSerivce.modifyUser(user);
		
		User user2 = userSerivce.findUserById("u1005");
		
		System.out.println("user1 id="+user2.getUserId());

	}

}

完成:项目案例二
根据下面的表,开发会计核算期类的开发(FiscalYearPeriod类):
在这里插入图片描述

六、结束语

点击继续学习…

猜你喜欢

转载自blog.csdn.net/zhangzhanbin/article/details/111614883
今日推荐