JAVA核心技术卷一第三章:对象与类(第二周)

1.类

(class)是构造对象的模板或蓝图
由类构造(construct)对象的过程称为创建类的实例(instance)
java是面向对象设计的程序语言,对于一些规模较小的问题,将其分解为过程的开发方式比较理想。面对对象更加适合解决规模较大的问题。
OOP(object-oriented programming)面向对象程序设计调换了传统的结构化程序设计思路,调换了考虑的次序,将数据放在第一位,然后再考虑操作数据的算法。
在这里插入图片描述
封装(encapsulation,有时称为数据隐藏)是处理对象的一个重要概念。
对象中的数据称为实例字段(instance field) ,操作数据的过程称为方法(method)

2.更改器方法和访问器方法(更改器方法类似于c++中的给对象赋值的函数,访问器方法类似于c++的类中调用private数据)

LocalDate aThousandDaysLater = newYearsEve.plusDays(1000);

上面的这个代码并没有将这个对象改为1000天之后的日期,而是新生成了一个新的LocalDate对象,然后把这个新对象赋给了aThousandDaysLater变量。原来的对象不做任何改动。

GregorianCalendar someDay = new GregorianCalendar(1999,11,31);
//odd feature of that class:month numbers go from 0 to 11
someDay.add(Calendar.DAY_OF_MONTH,1000);

与LocalDate.plusDays方法不同,GregorianCalendar.add方法就是一个更改器方法
调用这个方法之后,someDay对象的状态会改变。

year = someDay.get(Calendar.YEAR);//2002
mounth = someDay.get(Calendar.MONTH)+1;//09
day = sonmeDay.get(Calendar.DAY);//26

只访问对象而不修改对象的方法有时称为访问器方法。以上的方法(函数)就是只访问对象中的数据而不对数据进行更改的访问器方法。
/*
在c++中,带有const后缀的方法就是访问器方法;没有声明为const的方法默认为更改器方法。但是在java语言中,访问器方法与更改器方法在语法上没有明显的区别
*/

import java.time.*;
public class ClendarTest
{
	public static void main(String[] args)
	{
		LocalDate date = LocalDate.now();
		int month = date.getMonthValue();
		int today = date.getDayOfMonth();
		
		date - date.minusDays(today-1);//set to start of month
		DayOfWeek weekday = date.getDayOfWeek();
		int value = weekday.getValue();//1 = Monday,....,7 = Sunday

		System.out.println("Mon Tue Wed Thu Fri Sat Sun");
		for (int i = 1 ; i < value ; i++)
			System.out.print(“  ”);
		while(date.getMonthValue() == month)
		{
			System.out.printf("%3d",date.getDayOfMonth());
			if(date.getDayOfMonth()==today)
				System.out.print("*");
			else
				System.out.print(" ");
			date = date.plusDays(1);
			if(date.getDayOfWeek().getValue() == 1)
				System.out.printlan();
				}
			if(date.getDayOfWeek().getValue() != 1) System.out.println();
			}
		}

这个程序展示了和如何使用一个类的接口来完成相当复杂的任务,利用LocalDate类可以编写一个日历程序,能处理星期几以及各月天数不同等复杂问题。只需要使用这个类的接口来解决问题。

用户自定义类

Employee 类
在Java中,最简单的类定义形式为:
class ClassName
	{
		field1
		field2
		。。。
		constructor1
		constructor2
		。。。
		method1
		method2
		。。。
	}
下面看一个非常简单的Emgloyee类。在编写工资管理系统时可能会用到。
class Employee
	{
		// instance fields
		private String name;
		private double salary;
		private LocalDate hireDay;
		// constructor
public Employee(String n, double s, int year, int month, int day)
	{
		name = n;String東型
		salary = S;
		hireDay = LocalDate.of year, month, day);
	}

		// a method
		public String getName()
		{
			return name;
		) 
			// more methods
			。。。
	)

类的三大特性:

1.封装 2.继承 3.多态

封装:函数的封装是一种形式,隐藏对象的属性和实现细节(函数内部),仅仅对外提高函数的接口和对象进行交互。

类的访问限定符可以协助其完成封装

类的三个访问限定符

在这里插入图片描述

1.public:公有的,类的成员可以从类外直接访问

2.private/protected:类的成员不能从类外直接访问

3.类的每个访问限定符可以多次在类中使用,作用域为从该限定符开始到下一个限定符之前/类结束

4.类中如果没有定义限定符,则默认为私有的(private)

5.类的访问限定符体现了类的封装性
类的对象可以直接通过 . 来访问类的公有成员,类的对象指针可以通过->来访问类的公有成员

class person
{
public:
	void Display()
	{
		cout << _name <<"-"<< _age << endl;
	}
public:
	int _age;
	char* _name;
};
 
int main()
{
	person p;
	p._age = 18;
	p._name = "peter";
	p.Display();
 
	person* ptr = &p;
	ptr->_age = 20;
	ptr->_name = "jack";
	ptr->Display();
 
	system("pause");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值