JAVA程序设计——类、对象、方法、构造方法

以后每周六晚更新一周java学习内容及重点:

目录

类与对象

一、概念性问题(以下不是定义,个人理解)

二、类的定义

1.类的定义分为两部分:类方法与类声明

2.类修饰符的权限说明

1.private:

2.public

3.protected

3.类的方法定义

1.简要说明

2.例子

3.方法对于函数成员的使用

4.类的重载与类的构造方法

1.类的重载

2. 类的构造方法


类与对象

嗯..这个东西确实有点难懂,如果缺乏C++的经验,这东西可能会绕晕。

不过,功夫是不会负有心人的.

一、概念性问题(以下不是定义,个人理解)

1.对象:具体事物


2.类:具有某种共同特征的事物的集合


举个栗子:

把猫抽象成一个类:

在这一类中:找到共同特征——猫的种类?猫的颜色?猫的名字?

之后,一旦后三者确定一个对象就产生了——狸猫(种类)白色(颜色)名字(CoolGuang)

所以可见两者的关系——对象是类的具体体现。


3.方法:指的是在类中共有的一些行为

比如在猫类中,猫可以睡觉可以吃饭可以打麻将。

在类中定义一个方法(类比C中的函数),使用这个方法就可以让猫去做一些特定的事情。


4.属性:类比C中的变量——拥有的特征


二、类的定义

1.类的定义分为两部分:类方法与类声明

[public|private|protected|abstract|final] + class + 类名 构成一个类的表头

前面[]内的内容为class的修饰符 ——根据英文名称可以推出 共有 私有 受保护的 抽象的 和 终定义 的概念

前面修饰符的一些表述:

2.类修饰符的权限说明

(1)privte:私有。只有在类的主体中才可访问。该关键字只能修饰属性和方法,不能修饰类。

(2)protected:受保护。该类及其子类的成员均可以访问,同一个包中的类也可以访问。该关键字只能修饰修饰属性和方法,不能修饰类。

(3)public:公共。该类或非该类均可访问。

(4)默认:不使用修饰符。只有相同包中的类可以访问。

1.private:

首先注意只能修饰属性和方法

否则会提示上述错误,即类只能由public , abstract , final 去修饰

只有在类的主体中才能访问:

首先在同一个包内,定义一个Dog类:

下面在同一个包内,构造一个对象去访问这个类:

此时的输出结果:

CoolGuang:I am eating!

但是如果将其中一个public变量的权限改为pricate,运行结果:

显而易见:同一包内的访问被private限制了——同一包内不同类不能访问

与此,测一下不同类中是否可以相互访问:

同样的,报错显示了:

之后把private改为public之后,访问成功并输出结果。

所以private测试完毕:

1.同一包下,不同类不可访问

2.互不相同的子类中,也无法互相访问。

2.public

 这一类权限不用多解释,有点最高权限的意思,所有均可访问。

3.protected

首先,与private一样只能修饰属性与方法。

其次看一下权限问题:

首先将上述private的测试拿来,将private改为protected之后,可以发现没有编译报错,说明可以访问——可以访问被同类中的其他子类访问 。

之后继续测一下,同一包下的访问,测试说明,同一包下的访问也是可以的。

什么时候不可以访问呢——在不同包下的其他类中不可访问


3.类的方法定义

一般来说可以通过类比C中的函数。

1.简要说明

方法类比C中的函数,但定义有所不同。

除了返回类型+函数名外,加了权限的设置——以上描述的权限设置,如果在返回类型之前加入权限,那么这个函数的访问权限(或者这个方法的使用权限)就会发生改变。

2.例子

例如:(一个计算器的类):

上述运行结果即为5。 

可见上述定义Getsum这个方法时,没有加任何修饰符——默认权限,默认权限是friendly的权限,这类权限在同一包下是可以相互访问,所以没有编译报错。

下面将Getsum方法之前,增加private修饰符:

此时,在主类中调用Getsum这个方法时会发现,提示错误的意思是 方法在本类中不可见——验证了private的权限。

3.方法对于函数成员的使用

测试一下一些关于变量的问题:

首先将上述定义与使用换一下顺序,发现并没有报错,并且可以运行成功——顺序不影响方法调用本类中的变量 

运行上述程序,发现代码不是的结果不是z=3,而是z=6,说明本类调用中采取就近原则调用。 

将int z = 6这行代码去掉之后,发现程序结果输出为z=3:

之后在考虑一个问题,顺序影不影响方法调用内部变量? 

运行该程序,发现结果为z=3,那么说明 方法内部调用与定义是分先后顺序的 。

4.类的重载与类的构造方法

1.类的重载

类的重载是什么意思呢?简单理解一下就是一个方法可以因为某一个变量不同而改变。

看一下例子:

可以看到,定义了两个Getarea函数,在C++中这样定义是不允许的,为什么在Java中可行呢?发现两个函数的参数个数不同,一个为一个另一个为两个。

运行结果为:

很明显:系统对这两个方法调用的时候进行了明确的区分——也就是说过程中发生了重载。

 为什么会发生重载?因为参数个数不同使得系统知道该调用哪个Getarea形式的函数。

系统如何知道?因为两个函数的参数有明确的不同——一个参数和两个参数,所以系统会根据你传参的个数分别去调用一些函数。

那么什么情况会发生重载?

就是这种当函数区分度足够的时候,系统就会自动发生重载。

比如:参数个数不同,参数类型不同,返回值不同

Note:参数类型不同的时候,int与long long这种是无法发生重载的(区分度不够)

2. 类的构造方法

什么是构造方法?意思即为当你创建这个类的对象时,对象内的初始化操作。

构造方法与方法在形式上是一样的,不过构造方法是没有返回值的。

之前的操作,都是对类中的成员变量首先赋值,当没有赋值而是根据你意愿来时,这时候就需要构造方法:

可以看到此时,Cat类中的name与activity都没有事先声明变量的值是多少, 但是输出结果却为:

这就说明name与activitiy被赋值了,通过什么赋值的呢,就是构造方法赋值。

同样的,构造方法也支持重载:

以上的输出的结果即为:

 可以看到构造方法被重载了——有助于对象的实例化


发布了157 篇原创文章 · 获赞 146 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_43857314/article/details/104870335