class="p0" style="margin-top: 0pt; margin-bottom: 0pt;">类与对象
需要注意到的一点是String并不是八种基本数据类型之一,而是一个对象,所以不能写成string。
八种数据类型包括整型:byte?short?int?long??,浮点型:float?double?,逻辑型?boolean(其中,它只有两个值true?false,而不是把非零都看作是真)?,字符型?char。
public,protected,private?是用来定义成员的访问权限的,如果不写的话则为默认型,默认型根据系统不同而不同。
一般来说,定义属性用private,可以保护属性不被任意修改;定义方法用public。
一个类中用private定义的属性在其他类中不能被直接调用,如,应该在这个类中getName()函数来调用到name,用setName()函数来给name赋值,并且需要注意的是不能在clas类中调用getName()、setName(),而只能在方法中调用。
并不能这样使定义为private的变量值发生改变,因为需要先getblood再setblood,
这就需要通过中间变量来存放取得的blood值。
?
同时也要注意到getName()和setName()中返回值类型的差别,getName()是void,而setName()是需要得到返回值的,所以这时候要在setName()中用上return语句。
按照方法有无返回值,可以将方法分类为有返回值的方法和无返回值的方法两种。按照方法有无参数,分为有参方法和无参方法两种,有参方法中要规定好参数的数据类型和数目和名称,如public?void?study(int?hour,String?k){??},但定义的时候不能这样public?void?study(int?,String?){??}。
构造方法的意义在于一是创建对象,二是初始化属性。构造方法的名字必须和类名一致,构造方法不必声明返回值类型,但一定有返回值,返回值的类型就是方法名。
构造方法如:
?
?
?
?
?
?
?
public?class?Student{
public?Student(){
}
}
?
?方法重载
在一个类中可以定义多个方法名相同,但参数个数、参数类型、参数顺序不同,否则会报错。比如仅仅是参数名称不同。
public?Student(){
}
public?Student(String?name,String?km){
}
public?Student(String?n,String?k){
}
方法重载包括构造方法的重载和一般方法的重载,上述是构造方法的重载。
public?void?study(){
}
public?int?study(){
return?n;
}
像这样,返回值类型不同,也会报错,因为调用时并不知道该选择哪一个方法。
?
在一个已经定义的类Student?中,如果没有定义构造方法,默认有一个无参构造方法,可供调用,但是如果重载了构造方法,则默认的构造方法已经失效,这时候如果还想调用默认的构造方法就需要进行显式声明。
<!--EndFragment-->
就会得到这样的结果
<!--EndFragment-->
?
由于遵循就近原则,这时候的这三个name都是同一个name,因此需要利用this语句才能把实参的值传递给这个类的形参。
?
?
?
?
?
<!--EndFragment-->
?
?
<!--EndFragment-->