Java面向对象的程序设计(二)--对象交互

一、封装

封装是面向对象里面一个基本概念,先通过图片中蛋清与蛋黄来感性了解一下

 封装,就是把数据和对数据的操作放在一起,并且是操作来把数据掩盖起来。

Tips:

1、所有的成员变量必须是private的,这样就能避免别人进行改动从而造成混乱

2、所有public的函数只是用来提供服务的,而不是用来直接访问数据的,除非这个类单纯到只是访问数据。 

二、几种访问属性

 private:

private可以用在成员变量前面也可以用在成员函数前面,它表示这个成员是这个类所私有的,

即只有在类内部操作时才能访问它。

但是比较难理解的一点是:这个限制是对类的而不是对对象的。

 我们以Fraction的代码中的加法操作的函数为例:

扫描二维码关注公众号,回复: 8730275 查看本文章

一个类所有的不同的对象之间可以互相访问别人的私有成员

Fraction plus(Fraction f){
	int c =this.b*f.b;
	Fraction s = new Fraction();
	s.b=c;
	s.a=f.a*this.b+this.a*f.b;//例如这里可以直接访问f.a和f.b
	return s;
}

public:

public即任何人都可以访问。这个真的没什么好说的。

friendly:

如果前面没有限定词,既没有private,也没有public,那么这种类型叫做friendly,什么意思呢?

friendly表示这个成员函数或者成员变量甚至是类,可以在一个包内相互访问

Tips:1、一个.java的类中只能有一个public的类,而且这个类的名字必须与文件名相同!

也就是当一个.java文件中有多个类的时候,只能有一个是public的

2、一个.java文件叫做一个编译单元,编译的时候一次对这一个.java文件进行编译

三、包治百病!

当程序很大,类很多的时候,就需要一个机制管理一个工程中众多的类了。

包就是Java的类库管理机制,他借助文件系统的目录来管理类库。

一个包就是一个目录,一个包内的类必须放在一个目录下,并且个目录的包必须是包的名字。

如果我们在一个包的类中要引用另一个包的一个类,那么我们就需要import

例如我们要调用另一个名为Display的包的名为display的类,那么我们可以再当前文件中包的那一行下面加一句

import Display.display;

我们也可以

import Display.*;//这样是把这个包所有的类都引进来,但是有时候会引起混乱,所以不推荐使用

包的名字里可以有 . ,这个点表达的就是文件夹的层次

 四、类变量

static:

如果某个成员有static做修饰,他就不再属于某一个对象了,而是属于整个类的了。

比如我们文件里加一个static的成员变量flag初始化为1。

private static int flag = 1;

你可以通过某个对象来修改flag为0,但是修改之后,你再通过其他对象输出flag,flag不再是1了,而是0。

而且我们可以直接  类 . flag = 3 来将flag修改为3

这说明static修饰后,变量属于整个类,而不是属于各自的对象。

让我们再捋一捋

未加static的成员变量是属于对象的!

加了static的成员变量是属于整个类的!

 所以我们把加了static的变量叫做类变量

所以当我们通过对象访问类变量的时候,对象会进行回溯,找到自己的类中的那个类变量,然后进行操作。

无独有偶,加了static的函数叫做类函数

在static的函数里你可以直接调用其他static的函数,

但是在通过某个对象调用static函数的时候,你并不能获得那个对象的什么信息。因为类函数也是属于类的。

那么我们接下来可以说一说为什么系统自动生成的main函数为什么是

public static void main(String[] args) {

1、为什么是public?

因为要通过虚拟机调用,当然不能设定成私有的或friendly

2、为什么是static?

因为如果没有static,那么main函数必须通过对象调用才能运行此函数,所以main函数可以在无需建立任何对象的情况下作为程序运行的入口。

3、为什么是(String[] args)?

其实这个名字是为了与Sun Java规范范例中的main()的参数名保持一致,取名为args

String数组是为了截获命令行输入参数,具体不是很清楚

最后当然要愉快的贴代码啦~

做的模拟时钟(小时:分钟)

主要思想:小时和分钟大致是一种表现形式,所以我们可以定义一个类,然后根据这个类创造出两个对象hour和minute

关键在于我们想要使各对象之间相互独立,并且是通过更高层的类来管理这两个类,这种思想学到了,还很简单,希望以后能做更多大工程,不说废话了,贴代码~

第一个类,是用来创造hour和minute的

package clock;

public class Display {
	int value = 0;
	int limit = 0;
	Display(int limit)//各自进制不同所以构造函数还是要传参
	{
		this.limit=limit;
	}
	void increase()
	{
		value++;
		if(value==limit)
		{
			value=0;
		}
	}
	int getvalue()
	{
		return value;
	}
	public static void main(String[] args) {
		
	}
}

第二个类,是用来合并并且实现进位的

package clock;

public class Clock {
        private Display hour = new Display(24);
	private Display minute = new Display(60);
	void start()
	{
		while(true)
		{
			minute.increase();
			if(minute.getvalue()==0)//如果需要进位
			{
				hour.increase();
			}			
			System.out.printf("%02d:%02d\n",hour.getvalue(),minute.getvalue());//输出小时:分钟,格式很重要
		}
	}
	public static void main(String[] args) {
		Clock clock = new Clock();
		clock.start();//时钟启动!

	}
}


nice!

发布了99 篇原创文章 · 获赞 21 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43721423/article/details/95745321