本篇博客主要介绍面向对象的基本原理和基本概念:
- 类和对象
- 成员函数
- 构造函数
- 重载和重写
一:类和对象
1:类和对象的关系示意图
2:类和对象的关系和区别
- 类是抽象的,代表一类事物,比如:人类,猫类.....,即它是数据类型
- 对象是具体的,实际的,代表一个具体事物,即是实例
- 类是对象的模板,对象是类的一个个体,对应着一个实例
3 :类的组成
-
成员变量:
成员变量是类的属性,声明该类的对象所具备的属性。声明数据成员往往需要声明以下 几项:
1.权限修饰符(Java中权限修饰符有4种):如私有权限private,公有权限public。在大多 数情况下,都建议数 据成员使用私有权限。
2.数据类型:数据成员必须指明其数据类型,如String和Integer。Java 中的数据类 型分两种,基本类型和引用类型。
3.数据成员标志符:即数据成员的名字。首字母不能是数字,采用合法标识符。
4.初值:数据成员可以赋初值,也可不赋初值。如果不赋,则会有默认值(根据数据类型 不同而不同)。
-
构造函数:
一个类什么都不写,也会有一个无参的构造函数;构造函数用于实例化一些初始值;一旦定义了有参构造函数,无参构造函数必须要显示定义,这样无参构造函数才能使用;和类名相同;没有返回值;new的本质就是在调用构造函数
-
成员函数:
方法成员是该类对象所能进行的操作。往往需要声明一下几项。
1.权限访问修饰符:与数据成员的修饰符概念相同,该类中的方法使用公有权限 public。
2.返回值类型:方法成员必须指明返回值类型,如果该方法没有返回值,则使用void。
3.方法成员标志符:即方法的名字。规则与数据成员标志符相同。建议方法成员采用动 词性质单词命名。
public class People
{
String name,sex; //成员变量声明
int age;
public People(){ //无参构造函数
}
public People(String name,String sex,int age){ //带参构造函数
this.name=name;
this.sex=sex;
this.age=age;
}
void display(){ //成员函数
System.out.println("name="+name);
System.out.println("sex="+sex);
System.out.println("age="+age);
}
}
4:使用类的实例化对象
由类定义 “变量” 不叫 “定义变量” ,而叫 “实例化对象”
类名 对象名 =new 类名();
此外,对象具有引用性质,对象名赋值并不是将对象中的内容进行赋值,只是将引用赋值。
5:函数重载和方法重写
1:什么是重载(overlording)
在JAVA中,可以在同一个类中存在多个函数,函数名称相同但参数列表不同。这就是函数的重载(overlording)。这是类的多太性表现之一。
2:重载的作用:
举个现实生活中的实例。假如你是个木工,我要让你制作桌子(返回值)。然后,我给了你紫檀木,你就可以制作一张紫檀桌子;我给了你黄花梨,你可以做黄花梨的桌子。这些不同材质的木料,就是参数。返回的都是桌子,但是具体使用哪个函数,就根据传入的木料不同来决定的。
所以,可以根据所传递进来的不同参数,决定具体调用哪个函数。提高了函数使用的灵活性。
3:重载的特征:
函数名和返回值类型完全一致。
参数的数量不同、或数量相同而类型和次序不同,以方便JVM区分到底调用哪个函数。
4:重写Overriding
“重载”不同于“重写”
“重写(覆盖)”概念存在于继承关系中,子类可继承父类中的方法而不需要单独编辑,这提供便捷化。但有的时侯,子类不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。
父类中存在一个函数,子类中也存在一个同名函数,在了类中对函数重新编辑,做得更具体化。
重写的规则:
1、在子类中可以根据需要对从父类中继承来的方法进行重写。
2、重写的方法和被重写的方法必须具有相同方法名称、参数列表和返回类型。
3、重写方法不能使用比被重写的方法更严格的访问权限。
5:实例:
创建MyClass类,其中包含两个类,方法名一样,参数不一样
package study;//MyClass类中,有两个print方法,但是参数不一样,实现了重载
public class MyClass {
public voidprint(String name){
System.out.println("姓名:"+name);
}
public void print(String name,intage){
System.out.println("姓名:"+name+"t年龄:"+age);
}
}
实例化 MyClass类:
import study.*;
public classMyTest {public static voidmain(String[] args)
{
MyClass c=newMyClass();
c.print("张三");
c.print("李四",20);
}
}



