一、面向对象编程思想
何为面向对象的编程思想:面向对象,将功能封装进对象,强调具备了功能的对象。
面向对象的三大特征
封装 (Encapsulation)
继承 (Inheritance)
多态 (Polymorphism)
面向对象的实例:人{
打开(冰箱){
冰箱.开门();
}
操作(大象){
大象.进入();
}
关闭(冰箱){
冰箱.关门();
}
}
冰箱{
开门(){} 关门(){}
}
二、类的概念与设计
(1)关联关系:
(2)继承关系:
(3)聚合关系:聚集关系:
组合关系:
(4)类与对象:
类是对一类事物描述,是抽象的、概念上的定义
对象是实际存在的该类事物的每个个体,因而也称实例(instance)。
类是由属性和对象构成的
属性:对应类中的成员变量 行为:对应类中的成员方法
三、创建一个java类并实例化对象
/*
* 1.面向对象遍程关注于类的设计
* 2.设计类实际上是设计类的成员
* 3.基本的成员:属性(成员变量或Field) &方法(method)
*/
package come.Xijian.java;
public class ClassTest {
}
class Person//类是抽象的
{
//1.属性
String name;
int age;
boolean sex;
//2.方法
public void eat()
{
System.out.println("人吃饭");
}
public void sleep()
{
System.out.println("人睡觉");
}
public String getName()
{
return name;
}
public void setName(String n)
{
name = n;
}
public void info()
{
eat();
sleep();
System.out.println("name:"+name+"age:"+age+"thanks");
}
}
四、类对象的内存解析
package come.Xijian.java;
/*
* 一、面向对象思想的落地法则一:
* 1.设计类,并设计类的成员(成员变量&成员方法)
* 2.通过类,来创建类的对象(也称作类的实例化)
* 3.通过"对象.属性"或"对象.方法"来调用,完成相应的功能
*
* 二、创建的多个对象,彼此各拥有一套类的属性,当其中一个对象的属性进行修改时,不会影响到其他对象
*/
public class Zoo {
public static void main(String[] args) {
//基本数据类型的声明:数据类型 变量名 = 初始化值
int i = 10;
//类的实例化
Animal a1 = new Animal();//类似于int[] arr = new int[10];
//通过对象调用属性
a1.name = "花花";
a1.age = 3;
System.out.println("name:"+a1.name+" age:"+a1.age);
//通过对象调用方法
a1.eat();
a1.sleep();
//再创建一个类的对象
Animal a2 = new Animal();
System.out.println("name:"+a2.name+" age:"+a2.age);//null 0
//a3并不意味着相较于a1重新创建的一个对象,而是a1与a3共用一个对象实体
Animal a3 = a1;
System.out.println("name:"+a3.name+" age:"+a3.age);//与a1一样
a3.name = "维尼熊";
System.out.println("name:"+a1.name+" age:"+a1.age);
}
}
class Animal
{
//1.属性
String name;
int age;
//2.方法
public void eat()
{
System.out.println("动物进食");
}
public void sleep()
{
System.out.println("动物休眠");
}
public String getName()
{
return name;
}
public void setName(String n)
{
name = n;
}
}
五、类的属性的说明与局部变量
类的属性(成员变量)
成员变量VS局部变量
相同点:1.遵循变量声明的格式:数据类型 变量名 = 初始化值;
2.都有作用域
不同点:1.声明的位置有所不同:成员变量:声明在类里,方法外
局部变量:声明在方法内,方法的形参部分,代码块内
2.成员变量的修饰符有四个:public private protected 缺省
局部变量没有修饰符,与所在的方法的局部变量相同
3.一定会有初始化值
成员变量:如果在声明的时候,不显示的赋值,那么不同的数据类型会有不同的默认初始化值
byte short int long ==》0
float double ==》0.0
char ==》空格
boolean==》false
引用类型变量==》null
局部变量:一定要显示的赋值。(局部变量没有默认的初始化值)
4.二者在内存中存放的位置不同:成员变量存放在堆空间中,局部变量存放在栈空间中。
总结:关于变量的分类:1)按照数据类型的不同,分为基本数据类型(8种)&引用数据类型
2)按照声明位置的不同,成员变量&局部变量。
六、java类的方法
1)类的方法:提供某种功能的实现。
格式:权限修饰符 返回值类型(void:无返回值/具体的返回值) 方法名 (形参表列){};
2)关于返回值类型:void:表明此方法不需要返回值
有返回值的方法在方法结束一定有return + 返回值
3)方法内可以调用本类的其他方法或属性,但不可以在方法内定义方法。
七、方法的重载
/*
* 方法的重载(Overload)
* 要求:1.在同一个类中2.方法名必须相同3.形参表列不同(①参数的个数不同②参数的数据类型不同)
* 补充:方法的重载与方法的返回值类型没有关系
*/
package come.Xijian.java;
public class TestOverload {
}
class OverLoad
{
//定义两个int型变量的和
public int getSum(int i,int j )
{
return i+j;
}
//定义三个int型变量的和
public int getSum(int i,int j,int k)
{
return i+j+k;
}
//不能与其他几个方法构成重载
// public int getSum1(int i,int j,int k)
// {
// return i+j+k;
// }
// public void getSum(int i,int j,int k)
// {
// System.out.println(i+j+k);
// }
//定义两个double类型的数据的和
public double getSum(double d1,double d2)
{
return d1+d2;
}
//定义三个double数据的和
public void getSum(double d1,double d2,double d3)
{
return d1+d2+d3;
}
}