目录
一、面向对象设计
1.面向对象与面向过程
面向过程思想
生活的角度理解: 只关注完成某件事,不关注是谁完成的
程序的角度理解:从main出发,一步一步执行某个功能,没有对象的调用
面向对象思想
生活的角度理解:关注某个对象去完成某件事
程序的角度理解:从main出发,找到对象再完成功能
2.类和对象
什么是对象?
在java的世界里,万物皆对象。也就是说任何可以进行描述的某个具体的的东西都能够成为对象,它是一类事物的具体化的个体(实例)(具有属性和行为的事务为对象)
什么是类?
类是具有相同属性和行为的一组对象的集合(相同类型的对象组成的一个集合)
面向对象编程设计:创建一个类,类里面有属性和方法,通过实例化对象,通过对象调用类里面的属性和方法,类是对象的抽象,对象是类的实例化
二、应用案例
1.实例化单个对象
class Dog{ //创建一个类
//类中有属性
String name; //----成员属性
int age;
public void eat() { //类中有方法--成员方法
System.out.println(name+"正在吃");
}
}
public class Test1 {
public static void main(String[] args) {
//实例化单个对象的案例:旺财今年2岁;会吃饭
//分析:类:Dog类 对象:旺财 属性:color,age 方法:eat
//实例化对象
Dog wc = new Dog(); //类名 对象=new 类名();
wc.name = "旺财"; //对象调属性 赋值
wc.age = 2;
System.out.println(wc.name); //取值
wc.eat(); //对象调方法
}
}
2.实例化多个对象
实例化多个对象:每个对象都有独立的成员属性
class Pig{ //创建一个类
String name; //类中有属性
public void eat() { //类中有方法
System.out.println(name+"很能吃!");
}
}
public class Test2 {
public static void main(String[] args) {
//实例化多个对象:佩奇很能吃,八戒也很能吃
//分析:类-Pig 对象-佩奇,八戒 属性:姓名 方法:eat
Pig peiQi = new Pig(); //实例化对象
peiQi.name = "佩奇";
Pig baJie = new Pig(); //实例化另一个对象
baJie.name = "猪八戒";
peiQi.eat(); //佩奇很能吃
baJie.eat(); //八戒很能吃
}
}
三、局部变量与成员变量
1.区别
主要从以下几点区分局部变量与成员变量
出现位置:
局部变量,出现在方法体中,方法参数中
成员变量,出现在类中,与成员方法同级
存储位置:
局部变量存储在栈区; 成员变量属于对象,存在堆区
作用域:
局部变量作用域在方法体中,出了方法体,则销毁
成员变量作用域,至少在当前类中
默认值:
局部变量没有默认值,必须先赋值,再使用
成员变量有默认值,String-null,int-0....和数组类似
重名问题:
重叠作用域下,重名变量,局部变量优先;作用域小的覆盖大的
案例:
//成员变量与局部变量的测试案例
class Cat{
String name;
int age;
public void eat() {
String name = "机器猫";
System.out.println(name+"很能吃");
}
}
public class Test1 {
public static void main(String[] args) {
Cat cat = new Cat();
System.out.println(cat.name); //null
System.out.println(cat.age); //0
cat.name = "加菲猫";
cat.eat();
}
}
四、方法重载
概述:在同一个类中,方法名相同,参数列表(个数,类型)不同
好处:统一管理同一种功能的行为,当具有相同功能,但是表现形式不一样的时候,适合用重载,可以更明确功能,比如动物叫的方法,通过重载,可以体现为狗叫、猫叫
案例:
案例:小明吃东西;传的吃的参数可以吃饭,吃药,吃糖,饭,药等可以是引用类型;请设计一个案例
多类型的应用案例:类-Person,Rise,Yao
//案例:小明吃药,吃饭..
//分析:类:Student,Yao,Rise 方法:吃 对象-小明
class Student{
//重载方法:类型不同
public void eat(Rise rise) { //成员方法
System.out.println("小明在吃饭");
}
public void eat(Yao yao) {
System.out.println("小明在吃药");
}
}
class Rise{ //米饭类
}
class Yao{ //药类
}
public class Test2 {
public static void main(String[] args) {
Student st = new Student();
st.eat(new Rise());
st.eat(new Yao());
}
}
五、构造方法
概述:类似于成员方法,有调用和实现两个部分;区别在于,构造方法不带返回值,也不写void类型
分类:无参构造, 带参构造
作用:一般使用来初始化对象的属性的,或者每次创建对象的时候需要执行的操作
注意:当我们创建一个类的时候,如果什么构造方法都没写,那么编译器会为我们自动生成一个默认的无参构造函数,但是当我们写了构造函数,那么编译器便不会为我们生成一个默认的构造函数
六、this应用
this:指当前对象,也就是谁
调用this所在方法,this就代表谁
this的用法: this调属性,this调方法 , this调构造方法
//this调构造方法案例:this()-调无参构造 this(参数)-调带参构造
//案例:女朋友帮忙洗衣服
class Girl{
String name;
int age;
public Girl() {
System.out.println("无参...");
}
public Girl(String name) {
this.name = name;
}
public Girl(String name,int age) {
//this(); //必须放在构造方法的首句-不常用 this调构造只能写一句,因为都要在首句
this(name); //this(带参)-不常用
//this.name = name;
this.age = age;
}
public void wash() {
System.out.println(age+"岁的女朋友"+name+"正在帮忙洗衣服");
}
}
public class Test3 {
public static void main(String[] args) {
Girl fj = new Girl("凤姐", 18);
fj.wash();
}
}