01、面向对象的基本概念
学习面向对象的过程,实际上也是建立面向对象思维的过程。
先整体,再局部。先抽象,再具体,看透事物的本质,用java代码来解释某个事物的行为和特征,将其转变成一个可以被程序理解和调用的实例。
02、类与对象之间关系
定义一个类的对象,其实就是创建一个类的实例,表示一个具体的对象。
格式: 类名 对象名 = new 类名();
例如: 人类 亚当 = new 人类();
左边的这个人类,表示亚当的类型是人类,右边的 new 人类(); 表示亚当是一个具体的实例,拥有人类的行为和特征。
在声明一个具体对象时,如果只声明对象而没有给出具体实例,例如
People p1 =null; 或者 People p2 ;
此时p1 和p2 无法正常使用,因为没有具体的内存指向。
p1 = new People(); p2 = new People();
在有了具体的内存指向后,p1和p2 才可以正常使用。
03、类中的成员
类的定义
class 类名 {
(特征)属性名称
例如: int age ; //年龄
(行为)方法名(){ }
例如: void move(){ 直立行走 }
}
如果要想访问类中的属性或方法则可以依靠以下的语法形式:
访问类中的属性:对象名.成员属性 ;
调用类中的方法:对象名.成员方法();
package Object_对象;
public class GirlFriend {
private String name;
private int age;
private String gender;
public void sleep() {
System.out.println("女朋友在睡觉");
}
public void eat() {
System.out.println("女朋友在吃饭");
}
public void setName(String n) {
name=n;
}
public String getName() {
return name;
}
public void setAge(int a) {
if(a>=18 && a<=50) {
age=a;
}else {
System.out.println("非法参数");
}
}
public int getAge() {
return age;
}
public void setGender(String g) {
gender=g;
}
public String getGender() {
return gender;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
GirlFriend g=new GirlFriend();
g.setName("小诗诗");
g.setAge(18);
g.setGender("女");
System.out.println(g.getName());
System.out.println(g.getAge());
System.out.println(g.getGender());
g.sleep();
g.eat();
}
}
04、类的构造器
类的构造器,也称为构造方法,每个类中都默认存在一个,与类名完全相同,没有返回值类型修饰符(包括void),没有参数的方法。
public class People {
public People() {
//自动产生的构造方法
}
构造方法的作用,是给类中的成员属性初始化赋值。在类中不允许先声明变量后赋值的情况,一般情况下,都是使用构造方法来给属性赋值,这个过程就是初始化。
构造方法也是类中的方法,支持方法的重载。即方法名相同,参数列表不同。同一个类中可以有多个构造方法,在创建类的对象时, new 类名 () ,这个()实际上就是一个无参构造。也就是说,在创建类的实例对象时,实际上是执行了该类的构造方法。
public class People {
public People() {
System.out.println("我是People类构造器");
}
public static void main(String[] args) {
People p1 = new People();//执行
}
}
注意:当在类中写了有参构造方法后。默认的无参构造将不再生效,创建类的实例对象时,需要根据构造方法传递对应的参数,否则就会报错。
(1)构造方法名称与类名相同,没有返回值声明(包括 void)
(2)构造方法用于初始化数据(属性)
(3)每一个类中都会有一个默认的无参的构造方法
(4)如果类中写了构造方法,那么默认构造方法将无效
(5)如果写了有参构造方法,还想保留默认构造方法,需要显示的写出来。
(6)构造方法可以有多个,但参数不一样,称为构造方法的重载
(7)在构造方法中调用另一个构造方法,使用this(...),该句代码必须在第一句。
(8)构造方法之间的调用,必须要有出口,否则会保错。
(9)给对象初始化数据可以使用构造方法或setter方法,通常情况下,两者都会保留。
(10)一个好的编程习惯是要保留默认的构造方法。(为了方便一些框架代码使用反射来创建对象)。
05、this关键字的调用
this关键字指向的是当前对象的引用
调用类中的属性:this.属性名称,指的是访问类中的成员变量,用来区分成员变量和局部变量(重名问题)
调用类中的方法:this.方法名称,用来访问本类的成员方法
调用类构造方法:this();访问本类的构造方法,()中可以有参数的 如果有参数 就是调用指定的有参构造
注意:
1.this() 不能使用在普通方法中,只能写在构造方法中
public class People {
public People(int age,String name) {
this();//调用无参构造
System.out.println("我是有参构造");
}
public People() {
System.out.println("我是无参构造");
}
public static void main(String[] args) {
People p1 = new People(20,"刘禅");
}
}