初始面向对象
1.普通方法重载
普通方法重载和静态方法重载规则是相同,唯独区别就是静态方法多了static关键字
package com.qfedu.test3;
/**
* 方法重载
* 1.同一个类中
* 2.方法名相同
* 3.参数列表不同
* 4.返回值 和 访问修饰符无关
* @author WHD
*
*/
public class Student {
String name;
int age;
public void print() {
System.out.println("名字" + name + "年龄" + age);
}
public void print(int num) {
System.out.println("输入的数字是" + num);
}
public void print(String str) {
System.out.println("输入的字符串是" + str);
}
public void print(int num,String str) {
System.out.println("数字是" + num + "字符串是" + str);
}
public void print(String str , int num) {
System.out.println("数字是" + num + "字符串是" + str);
}
public static void main(String[] args) {
Student stu = new Student();
stu.print();
stu.print(20);
stu.print("hello");
}
}
3.关键字的使用
3.1static关键字访问属性
1.我们定义的属性不一样的形参名称,用于区分形参和属性,但这样写不合适,名字起的不规范,所以我们将形参和属性改为同一个名字,改完以后,不能正常给属性赋值,因为构造方法中使用全部是形参 局部变量(在实例变量和局部变量重名的情况下,优先使用局部变量)
2.我们使用this关键字用于区分属性 this单词 这个的意思 表示当前对象
package com.qfedu.test4;
/**
* 构造(构建创造)方法
* 作用:创建对象,也可以创建对象的同时给对象的属性赋值
* 1.无参构造默认存在,不管是否书写都有,可以直接使用
* 2.如果书写了有参构造方法,无参的将被覆盖,如果需要使用, 显式 的写出来
* @author WHD
*
*/
public class Employee {
String name;
String department;
double salary;
char sex;
int workYear;
/**
* 1.我们定义与属性不一样的形参名称,用于区分形参和属性,但是这样书写不合适,名字起的不规范,所以我们将形参和属性改为同一个名字
* 改完以后,不能正常给属性赋值了,因为构造方法中使用全部是形参 局部变量
* 2.我们使用this关键字用于区分属性 this单词 这个的意思 表示当前对象
* @param name
* @param department
*/
public Employee(String name,String department) {
// Employee em = new Employee();
// em.name = name;
// em.department = department;
// name = name;
this.name = name;
this.department = department;
}
public Employee() {}
public void print() {
System.out.println("名字" + name
+ "部门" + department
+ "薪资" + salary
+ "性别" + sex
+ "工作年限" + workYear);
}
public static void main(String[] args) {
Employee zhaosi = new Employee();
zhaosi.print();
Employee guangkun = new Employee("广坤", "文娱部");
guangkun.print();
Employee xiaobao = new Employee("小宝", "文娱部");
xiaobao.print();
}
}
3.2this关键字访问
在本类方法中通过this关键+.方法直接调用本类中的其他方法
3.3this关键字访问构造方法
this关键字访问构造方法必须在其他构造方法的第一句,用于重复利用已经书写的构造方法
package com.qfedu.test5;
/**
* this关键字
* this表示当前对象
* 1.访问属性
* 2.访问方法
* 3.访问构造方法 必须在其他构造方法的第一句
* @author WHD
*
*/
public class Employee {
String name;
String department;
double salary;
char sex;
int workYear;
String address;
public Employee(String name) {
this.name = name;
}
public Employee(String name,String department) {
this(name); // 调用一个参数 并且为String类型的构造方法
this.department = department;
}
public Employee(String name,String department,double salary ,char sex ,int workYear){
this(name,department); // 调用两个参数,并且都是String类型的构造方法
this.salary = salary;
this.sex = sex;
this.workYear = workYear;
}
public Employee() {}
public void print() {
System.out.println("名字" + name
+ "部门" + department
+ "薪资" + salary
+ "性别" + sex
+ "工作年限" + workYear);
}
public void printName() {
System.out.println("名字是" + this.name);
}
public void printNameAndSex() {
this.printName(); // this关键字访问方法
System.out.println("性别是" + this.sex);
}
public static void main(String[] args) {
Employee guangkun = new Employee("", "");
Employee zhaosi = new Employee("赵四", "舞蹈部", 2500.0, '男', 5);
zhaosi.printNameAndSex();
}
}
3.4综合案例
package com.qfedu.test6;
import java.util.Scanner;
/**
* 综合案例
* @author WHD
*
*/
public class Employee {
String name;
String department;
double salary;
char sex;
int workYear;
public Employee(String name,String department,double salary ,char sex ,int workYear){
this.name = name;
this.department = department;
this.salary = salary;
this.sex = sex;
this.workYear = workYear;
}
public Employee() {}
public static void main(String[] args) {
// 让用户输入信息 然后调用全参构造方法创建对象
Scanner input = new Scanner(System.in);
System.out.println("请输入名字");
String name = input.next();
System.out.println("请输入部门");
String department = input.next();
System.out.println("请输入薪资");
double salary = input.nextDouble();
System.out.println("请输入性别");
char sex = input.next().charAt(0);
System.out.println("请输入工作年限");
int workYear = input.nextInt();
Employee zhaosi = new Employee(name, department, salary, sex, workYear);
System.out.println("名字" + zhaosi.name);
System.out.println("部门" + zhaosi.department);
System.out.println("薪资" + zhaosi.salary);
System.out.println("性别" + zhaosi.sex);
System.out.println("工作年限" + zhaosi.workYear);
}
}
4.封装
因为属性可能会有不正确的赋值 所以我们使用封装 解决这样的问题
1.属性私有 是指将类中的属性全部私有化 不让外部直接访问
2.方法公开 每个属性都提供一对公开的getter/setter方法 用于获取属性值 和 设置属性值
给属性设置值的方法 必须以 set开头 + 属性名 camel 驼峰命名
给属性赋值的方法 必须一get开头 + 属性名 camel 驼峰命名
package com.qfedu.test7;
/**
* 企鹅类
* 昵称
* 健康值
* 爱心值
* 因为属性可能会有不正确的赋值 所以我们使用封装 解决这样的问题
* 1.属性私有 是指将类中的属性全部私有化 不让外部直接访问
* 2.方法公开 每个属性都提供一对公开的getter setter 方法 用于获取属性值 和 设置属性值
* 给属性设置值的方法 必须以 set开头 + 属性名 camel 驼峰命名
* 给属性赋值的方法 必须以 get开头 + 属性名 camel 驼峰命名
* @author WHD
*
*/
public class Penguin {
private String name;
private int health;
private int love;
public void setName(String name) {
this.name = name;
}
public String getName(){
return name;
}
public void setHealth(int health) {
if(health >= 0) {
this.health = health;
}else {
System.out.println("健康值不能小于0,将使用默认值60");
this.health = 60;
}
}
public int getHealth() {
return health;
}
public void setLove(int love) {
if(love >= 0 && love <= 100) {
this.love = love;
}else {
System.out.println("爱心值不能小于0大于100,将使用默认值70");
this.love = 70;
}
}
public int getLove() {
return love;
}
}
package com.qfedu.test7;
public class TestPenguin {
public static void main(String[] args) {
Penguin p1 = new Penguin();
// p1.name = "小黑";
// p1.health = -200;
// p1.love = -500;
// System.out.println("名字" + p1.name + "健康值" + p1.health + "爱心值" + p1.love);
p1.setName("小黑");
p1.setHealth(-200);
p1.setLove(-800);
System.out.println("名字" + p1.getName() + "健康值是" + p1.getHealth() + "爱心值" + p1.getLove());
}
}
5访问权限修饰符
5.1类的访问修饰符
类的访问修饰符只有两个;
默认不写:表示本包中才能访问
public:表示本项目中任何位置 都可以访问
5.2类成员访问修饰符
类成员(属性和方法)访问修饰符
private 只有在本类中可以访问
默认不写 本包中可以访问
protected 本类 本包 子类
public:本项目任何位置
此处有图片
此处有图片