一:面向对象
1、Object_Oriented
//面向对象 oop
public class Object_Oriented01 {
public static void main(String[] args) {
/*
面向对象的思想:
万事万物皆对象
任何对象都有自己的特征和行为
对象:
特征:成为属性,一般名词,代表对象有什么
行为:称为方法,一般动词,代表对象能做什么
例如:手机是一个对象
手机属性:
品牌:
颜色:
价格:
重量:
......
手机的使用方法:
收发短信:
拨打电话:
......
*/
/**
* 如何使用程序模拟现实世界,解决现实问题
* 首先,在程序中,必须具有和现实中相同的对象,用以模拟现实世界
* 然后,使用程序中的对象代表现实中的对象,并执行操作,进而解决现实问题
* 现实中的对象多来源模板,程序中也应该有模板,模板也被称之为类,通过模板创建出来的实体,即为程序中的对象,称之为对象
* 现实中的对象----------->程序中对象
* 现实中的对象<-----------程序中对象
*/
/**
* 类的抽取:在同一组或类似的对象中,抽取出共性的特征和行为,保留所关注的部分
*/
/*
类与对象的关系
类:模板(一个) -->创建-->对象:实例(多个)
类:定义了对象对应具有的特征行为,类是对象的模板
对象:拥有多个特征和行为的实体,对象是类的实例
*/
/*
实例变量:
对于实例变量而言,未赋值可以直接访问,默认值为null
默认值:
整数:0
小数:0.0
字符:\u0000
布尔:false
其他:null
*/
/*
局部变量与实例变量的区别
局部变量 实例变量
定义位置: 方法或方法内的结构当中 类的内部,方法的外部
默认值: 无默认值 字面值(与数组想同)
使用范围: 从定义行到包含其结构结束 本类有效
命名冲突: 不允许重名 可与局部变量重名,局部变量优先
*/
//将对象保存在相同类型的dog中,dog变量成为“对象名”,或者引用名
Dog dog = new Dog(); //基于Dog创建对象
dog.breed = "金毛"; //调用属性,并填入他的所有的特征
dog.age = 10; //访问属性:对象名.属性名 = 值; //赋值
dog.furColor = "金色";
dog.sex = "公";
//System.out.println(dog); //com.javastudy03.Dog@5cad8086 输出这个dog在内存中位置
System.out.println( //访问属性
"品种:" + dog.breed + "\t" +
"年龄:" + dog.age + "岁" + "\t" +
"性别:" + dog.sex + "\t" +
"毛色:" + dog.furColor
);
dog.eat(); //调用方法:对象名字,方法名();
dog.sleep();
}
}
class Dog { //类名
String breed; //品种 属性:通过变量表示,又称为实例
int age; //年龄 语法: 数据类型 属性名
String sex; //性别 位置:类的内部,方法的外部
String furColor; //毛色
public void eat() { //方法:通过函数表示,又称为实例方法
System.out.println(breed + "会吃东西"); //加上品种,会干啥
}
/*
语法:
public 返回值类型 方法名(形参){
//方法的主体
}
*/
public void sleep() {
System.out.println(breed + "会睡觉");
}
}
2、实例方法:ExampleMethod
//实例方法
public class ExampleMethod_Practice02 {
public static void main(String[] args) {
/*
实例方法:
对象的实例方法包含两部分,方法的声明和方法的实现
方法的声明:
代表对象能做什么
组成:修饰符 返回值类型 方法名(形参列表)
方法的实现:
代表对象怎么做,即如何实现对应的功能
组成:{}
*/
/*
定义学生类:
属性:姓名(name)、年龄(age)、性别(sex)、分数(score)
方法:打招呼(sayHello) //打印学生所有信息
创建学生对象,并为属性赋值,并打印
*/
Student student = new Student();
student.name = "小明";
student.age = 18;
student.sex = '男';
student.score = 98;
Teacher teacher = new Teacher();
teacher.name ="宋鹏";
teacher.age = 22;
teacher.salary = 2526.8;
/* System.out.println(
"姓名:" + student.name + "\t" +
"年龄:" + student.age + "岁" + "\t" +
"性别:" + student.sex + "\t" +
"分数" + student.score
); //输出可以放这里*/
teacher.sayHi();
student.sayHello();
}
}
class Student { //学生类
String name; //姓名
int age; //年龄
char sex; //性别
double score; //分数
public void sayHello() {
System.out.println(
"大家好,我叫:" + name + "\t" +
"我今年:" + age + "岁" + "\t" +
"我是一个:" + sex + "生" + "\t" +
"我的考试分数是:" + score
);//也可以放这里
}
}
class Teacher {
String name; //姓名
int age; //年龄
double salary; //工资
public void sayHi() {
System.out.println(
"大家好,我是小明的老师,我叫:" + name + "\t" +
"我今年:" + age + "岁" + "\t" +
"我的工资是:" + salary
);
}
}
3、方法的重载:MethodOverloading
//方法的重载
public class MethodOverloading_Practice03 {
public static void main(String[] args) {
/*
方法的重载:有些情况下,对象的同一种行为可能存在多种实现过程
重载:在一个类中我们定义多个名称相同的方法
要求:方法名称相同
方法的参数列表不同(类型、个数、顺序)
与访问修饰符无关,返回值类型无关
调用带有重载的方法时,需要根据传入的实参去找到对应匹配的方法
好处:屏蔽使用差异,灵活,方便
两个方法的方法名称和参数列表都相同,只有参数名称不一样,编译报错
注意:只是参数名称不同,并不能构成方法的重载
*/
Operation op = new Operation();
op.show();
op.show(5);
/*String str = op.show("李磊");
System.out.println(str);*/
op.show("李磊");
op.show(1,"信息");
}
}
class Operation {
public void show() {
System.out.println("这是一个无参构造方法");
}
public void show(int number) {
System.out.println("这一个int类型的参数" + number);
}
/*public String show(String name){
return name;
}*/
public void show(String name) {
System.out.println("这一个String类型的参数" + name);
}
public void show(int number ,String massage) {
System.out.println("这一个String类型的参数:"+ number+"\t"+ massage);
}
}
4、构造方法:ConstructionMethod
//构造方法
public class ConstructionMethod_Practice04 {
public static void main(String[] args) {
/*
构造方法:类中的特殊方法,用于创建对象
特点:
名称与类名完全相同
没有返回值类型
创建对象时,调用构造方法,不可通过句点调用
注意:没有在类中显示定义构造方法,则编译器默认提供无参构造方法
构造方法重载:
构造方法也可以重载,遵循重载原则
*/
/*
类是模板,可服务于此类的所有对象,this是类中的默认引用,代表当前实例
当服务于某个对象时,this则指向这个对象
当创建s1对象时候,指向0*0000A001
访问的name属性即是0*0000A001地址中的name空间
当创建s2对象时候,指向0*0000B002
访问的name属性即是0*0000B002地址中的name空间
*/
Pupil pu = new Pupil();
pu.name = "小明";
pu.age = 10;
pu.sex = '男';
pu.score = 65.6;
//pu.sayHello();
Pupil pupil = new Pupil("宋鹏", 10);
pupil.sayHello();
Pupil pup = new Pupil("大佐", 19, '男', 98);
pup.sayHello();
//this可以调用属性和方法 this.name 调用name的属性
//调用本类中的其他构造方法 如this() this(实参) 必须在构造方法的首行
/*
调用带参构造方法注意:
只能调用一次
必须是第一条语句
在构造方法中,调用本类的其他的构造方法,即可复用构造方法中的逻辑代码
*/
}
}
class Pupil {
String name;
int age;
char sex;
double score;
//默认的构造方法
public Pupil() {
System.out.println("默认的构造方法执行了");
}
public void sayHello() {
System.out.println(
"大家好,我叫:" + this.name + "\t" +
"我今年:" + this.age + "岁" + "\t" +
"我是一个" + this.sex + "生" + "\t" +
"我的考试分数是:" + this.score
);//也可以放这里
}
public Pupil(String n, int a) { //构造方法为属性赋值
name = n;
age = a;
}
public Pupil(String n, int a, char s, double sc) {
this.name = n;
this.age = a;
this.sex = s;
this.score = sc;
}
}