Java之面向对象
一、对象
1.概念:复杂的客观事物,是Java程序中的一种表现形式(一切客观事物都是对象)
2.组成:
(1)属性:代表对象有什么特征或特点(对象的静态部分) 用变量来表示
(2)方法:代表对象有什么功能(对象的动态部分) 用函数或方法表示
3.计算机中对象的描述:用类对一组对象进行描述,该对象有哪些属性和方法
4.类和对象的关系:
(1)类是对象的模板
(2)对象是类的实例
二、类的组成
1.属性:描述对象有哪些特征、特点
a.属性又称成员变量
b.位置:定义在类以内,方法以外(作用范围:至少在本类中有效)
c.数据类型 变量名;
数据类型 变量名=值;
注:声明和赋值需要一起进行;
类中定义属性,只需定义程序功能所需要的那部分属性即可。
class Dog{
String name; //成员变量
int age;
char sex;
d.成员变量具有默认值 与数组相同
整数:0;
小数:0.0;
字符:空字符('\u0000');
布尔:false;
引用:null;
e:命名冲突
在一个类中不能有重名的属性(成员变量),但成员变量可以和局部变量命名冲突,此时优先使用局部变量(在定于局部变量的方法中)。
f:成员变量和局部变量区别
位置:局部变量 定义在方法内;成员变量定义在 类以内 方法以外;
默认值:局部变量 无默认值 先赋值后使用;成员变量 有默认值
作用范围:局部变量 从定义开始 到定义它的代码块结束;成员变量 至少在本类中有效
命名范围:在重合的作用范围内,不允许冲突;成员变量 可以和局部变量命名冲突,冲突时,在定义局部变量 的方法中,优先使用局部变量。
2.方法:描述对象有哪些功能 行为
(1)方法又称成员方法;
(2)位置:定义在类以内,其他方法以外;
(3)定义:
a.方法的声明:代表对象能做什么;
方法修饰符 返回值类型 方法名
b.方法的实现:代表对象具体怎么做,如何实现声明的功能;
注:一个方法可以有多个修饰符,且修饰符之间没有先后顺序。
public void play(){ //方法
System.out.println("宠物狗。。。");
this.play(3);
3.方法的重构(overload)
a.在一个类中定义多个相同名字,但是形参列表不同(个数、顺序、类型)
b.要求:
①方法名相同
②形参列表不同
③返回值类型、修饰符、异常没有要求;
注:只是形参名字不同,不能构成方法重构
c.使用:编译器会根据调用时指定实际参数,决定具体调用那一个方法。
3.构造方法:是类中的一种特殊方法,也称构造器
(1)特点:
a.构造方法的方法名必须和类名完全一致;
b.构造方法没有返回值(void也没有)
c.构造方法允许重载
d.构造方法不允许手动调节
public Dog(){ //构造方法
System.out.println("Dog()...1"); //无参数
}
public Dog(int a){ //有参数
System.out.println("Dog(int a)...2");
}
public Dog(String name,int age,char sex){ //形参相当于局部变量
System.out.println("Dog(String name,int age,char sex)...3");
(2)注:
a. 构造方法不允许手动调用,在创建对象时,根据 指定实际参数决定调用哪一个构造方法完成对象 的创建,一个对象的创建只能调用一次构造方法
b. 如果一个类中没有定义任何构造方法,则会自动默认添加一个公开无参数的构造方法; 如果类中定义了任何的有参数的构造方法,则不再提供默认的公开无参数的构造方法。
(3) 构造方法的作用:通常用于给属性赋值。
(4) 建议:定义一个类时,通常提供无参数的构造方法和有参数的构造方法,没有特殊说明的情况下,有参数的构造方法的参数个数取决于属性的个数和类型。
三、对象的创建
1.写法: 类名 对象名=new 类名();
2.使用:
①对 属性赋值:对象名.属性名=值;
调用属性:对象名.属性名
②调用属性的方法: 对象名.方法名(实参);
package demo; //成员变量与局部变量冲突先局部
public class TestDog{
public static void main(String[] args){
Dog d=new Dog(); //创建对象时,根据传递的参数,决定使用哪一个构造方法完成对象的创建
Dog d2=new Dog(2);
Dog d3=new Dog("菽粟",2,'公');
System.out.println(d3.name+"-"+d3.age+"-"+d3.sex);
d3.play();
}
}
class Dog{
String name; //成员变量
int age;
char sex;
public Dog(){ //构造方法
System.out.println("Dog()...1");
}
public Dog(int a){
System.out.println("Dog(int a)...2");
}
public Dog(String name,int age,char sex){ //形参相当于局部变量
System.out.println("Dog(String name,int age,char sex)...3");
// 形参对应的局部变量中存储的数据传递给属性
// 成员变量=局部变量(形参)
this.name=name;
this.age=age;
this.sex=sex;
}
public void play(){ //方法
System.out.println("宠物狗。。。");
this.play(3);
}
public void play(int hours){
System.out.println("宠物狗玩..."+hours);
}
}
四、this的应用
1.this.的应用
a.this. 用在类中的成员方法或是构造方法中,代表调用当前对象的属性或是成员方法。
b.this.属性名:代表调用当前对象的属性
this.成员方法名(实参);代表调用当前对象的成员方法。
注:this.通常可以省略,但是一旦成员变量和局部变量命名冲突时,需要用 this. 来区分 成员变量.
2.this()
a.this()用在类中构造方法中,代表调用本类中的其他构造方法。
b. this() : 代表调用本类无参数的构造方法
this(实参):代表调用本类有参数的构造方法
c.this()/this(实参) 必须定义在构造方法中第一行有效语句
d.this()/this(实参) 使用时避免出现递归调用,所以一个类中构造方法中的第一行不能都使用this()/ this(实参)
更多推荐
所有评论(0)