类和对象
date: 2018-12-08
什么是对象
对象是一个具体的物体或事件,例如:某一部手机、某一个人……
那么如何描述一个对象呢
某一部手机:
- 特征:品牌、版本、手机名、尺寸、外观、CPU、GPU……
- 功能:打电话、联网、运行软件、拍照……
某个人:
- 特征:姓名、身高、体重、性格、爱好……
- 行为:讲话、走路、学习、吃饭……
通过以上的举例可以看出对一个对象的描述主要由两部分组成:
- 特征(属性)
- 行为(功能、用途)
那么什么是类呢
在生活中,类就是对某些具有相似特征、相似行为的对象的抽象定义。而程序中的类则是将生活中的类按照一定的规则翻译而来。
程序中的类也由两个部分组成:
- 成员变量(属性):根据对象的特征定义
- 成员函数(方法),分为两类:
- 构造方法:用于类的实例化,仅调用一次
- 普通方法:根据对象的行为(功能、用途)定义
 
类的格式
    访问修饰符 class 类名 {
        //定义属性
        访问修饰符   数据类型  属性名;
        //构造方法
        访问修饰符  构造方法名(数据类型  参数名,...){/*...*/}
        //普通方法
        访问修饰符  返回值数据类型  方法名(数据类型 参数名,...){
            return 返回值(返回值数据类型为void时不能有返回值,且该语句可以省略);
        }
    }
访问修饰符在类或抽象类中有四种:
- public
- protected
- default(可以省略)
- private
构造方法
特点:
- 没有返回值类型
- 名字与类名完全相同
- 每个对象仅能调用一次构造方法
用途:
- 实例化一个对象
- 用于初始化成员属性
实例化对象和调用格式
实例化对象的关键字:new
- 实例化格式:
- 类名 对象名 = new 类名(参数值,……)
 
- 调用属性、方法的格式:
- 对象名.属性名
- 对象名.方法名(参数值,……)
 
方法重载
有时候我们会遇到某些方法的功能相似的情况,如果每个方法我们都专门起一个名字,那么使用起来会造成许多不便,所以针对这种情况,我们可以选择使用方法重载。重载支持构造方法和普通方法。
重载的条件:
- 方法名相同(构造方法的方法名肯定相同)
- 方法的参数个数、类型、顺序至少有一个不同(tips:返回值类型不作为条件)
重载的方法在调用时,会根据给定的参数匹配相应的方法,不需要特别声明。
例:求出两个值之间的较大值:
//不重载
public int max_int(int a, int b) {return a > b ? a : b;}
public float max_float(float a, float b) {return a > b ? a : b;}
//重载
public int max(int a, int b) {return a > b ? a : b;}
public float max(float a, float b) {return a > b ? a : b;}
可以看出第一种方法在调用时要先区别传递的参数的类型,再选择相应的函数,会给工作带来一定的额外负担,而第二种方法你只需要保证max方法支持某种数据类型的比较即可。
对象:我要调用我自己的时候怎么办
在定义类的成员方法的过程中,我们总会需要用到当前调用该方法的对象,但是上文已经讲到调用类的方法需要通过对象名来调用,而在定义方法的时候我们显然不知道对象的名字是什么,这时候就需要用到一个关键字:this。这个关键字就表示当前对象。
Java中有一个就近原则,即当一个名字被多次使用的时候,程序会根据代码的位置匹配到最近的名字,这时候就可能产生歧义,需要用到this
this的使用方法:
- this.属性名 调用属性
- this.普通方法名(参数值,……) 调用普通方法
- this(参数值,……) 调用构造方法
其中第三种方法出现在构造函数中:
public class Student {
    public String name = null;
    public int score = 0;
    public Student(String name) {
        this(name, 0);    //这个构造方法没有提供score的值,我们选择初始化其为0,并通过调用另一个构造函数来实现
    }
    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }
}
个人博客:https://wilfredshen.cn/
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号