对象,类,属性,方法的解析:
以人为例。
类:人可以看作一个类。
对象:具体到什么人(黄种人,白种人,黑种人,中国人等等)这就可以看作是对象,可以根据需求继续往下区分,比如 男人 女人。
属性:比如说黄种人的特点:黄皮肤,黑头发,黑眼睛等等,这些就是黄种人具有的属性,本身存在的,也可以是后天加上去的,是不需要人刻意去行动,自然而然表现出来的。
方法:方法其实是某种人的具体行为解释,比如说会走路,会说话
方法可以看作是动词(行为动作的解释),属性是名词(事务本身具有的特性)。
名词解释到这里,我们用代码来看看,用代码是如何做到上述名词的描述。
public class PersonDemo { //这是类
private String name; //这是属性 姓名
private String sex; //这是属性 性别
private int age; //这是属性 年龄
public void say(){ //这是方法
System.out.println("我是黄种人");
}
public static void main(String[] args) { //main函数 Java应用程序的入口方法
PersonDemo PD = new PersonDemo(); //new一个对象
PD.say(); //调用方法
}
从上述代码我们可以看出:
①创建对象,那么我们首先要有一个类,通过类new一个对象
②方法与类的区别在于:类有class开头,无();方法需放在类的里面,方法有(),()的设置在于是否需要传参
PersonDemo PD = new PersonDemo();
这段代码,我们怎么理解呢?
很多人说,在这段代码中,我们new了一个PersonDemo的对象,名叫PD,其实这是种错误的理解。
PD只是PersonDemo的对象的一个引用,
分析过程:
第一步:new PersonDemo():在堆内存中,创建PersonDemo对象。
第二步:PersonDemo PD :在栈内存中创建引用PD,(其值为堆内存中PersonDemo对象的内存地址)
第三步: PersonDemo PD = new PersonDemo();将引用PD指向PersonDemo对象,也就是给PD赋值,其值为PersonDemo对象的内存地址
综上三步,我们在 PD.say(); 时,其实是经历上面三步后再通过PersonDemo()对象调用say();完成打印输出。
分析图如下
那么下面这个代码该怎么分析呢?
PersonDemo PD1 = PD;
这个就是将PD的内存地址(堆空间中的PersonDemo地址)赋值给PD1,这样PD1的指向也是PersonDemo。PD1同样是PersonDemo的对象的一个引用
当完成上述代码后,PD1,PD都可以对PersonDemo的状态进行改变,任意一个引用的改变会引起另一个引用的改变,因为它们指向的是同一个对象
从上分析可以看出:一个对象可以有多个引用,但是一个引用只能指向一个对象
结束语:通过上面的分析,我们可以总结出基本的面向对象思想
事物—-类—-对象—-引用
①引用 控制 对象状态
②先有类才有对象
假如你只创建一个引用,比如
PersonDemo PD;
那么你在使用这个PD时,必须给它指定一个对象