Day11-面向对象
Day11-面向对象
对象的学习(不是找个女朋友!)
任何对象,都有自己的特征和行为。特征称为对象的属性,一般为名词。行为称为对象的方法,一般为动词。
类
类相当于模板,描述一类对象的行为和状态
比如说,狗是一个类他的对象有哈士奇,德牧等..对象的属性就是类似品种(breed),大小(size),颜色(color),年龄(age)这种,对象的方法有eat(),run(),sleep()等等
/**
* 类
* 自定义类 HelloWorld Dog
* 系统类 System String Math
* Dog类
*/
public class Dog {
//特征(属性)代表有什么
//数据类型 属性名
//品种 年龄 性别 毛色
String breed;//品种
int age;//年龄
String sex;//性别
String furClolor;//毛色
int num;//编号
//行为(方法)代表能做什么
//eat()
public void eat() {
System.out.println("eating");
}
//sleep()
public void sleep() {
System.out.println("sleeping");
}
}
/**
* 测试类
*/
public class TestDog {
public static void main(String[] args) {
//数据类型 变量名 = 值;
//1、创建了Dog类的对象,并将其存储在dog1变量中
Dog dog1 = new Dog();
//2、访问属性
//对象名.属性名 = 值; 赋值
dog1.breed = "萨摩";
dog1.age = 2;
dog1.sex = "公";
dog1.furClolor = "白色";
dog1.num = 007;
//3、访问属性 取值
//对象名.属性名
System.out.println(dog1.breed + "\t" + dog1.age + "\t" +dog1.sex + "\t" +dog1.furClolor + "\t" +dog1.num + "\t");
//4、访问方法
//对象名.方法名
dog1.eat();
dog1.sleep();
//创建第二个Dog类对象
Dog dog2 = new Dog();
//赋值
dog2.breed = "田园犬";
dog2.age = 1;
dog2.sex = "公";
dog2.furClolor = "黑白";
dog2.num = 996;
//访问属性 输出
System.out.println(dog2.breed + "\t" + dog2.age + "\t" + dog2.sex + "\t" + dog2.furClolor + "\t" + dog2.num + "\t");
//访问方法 行为
dog2.eat();
dog2.sleep();
}
}
/**
* 定义学生类
* 属性:姓名(name)、年龄(age)、性别(sex)、分数(score)
* 方法:打招呼 sayHi()//打印学生所有信息
*/
public class Student {
//特征:属性
String name;
int age;
String sex;
double score;
//行为:方法
public void sayHi() {
System.out.println("大家好,我的名字是"+name+",今年"+age+"岁了"+"性别:"+sex+"成绩是:"+score);
}
}
/**
* 测试类
* 把学生对象放入数组中进行遍历
*/
public class TestStudent {
public static void main(String[] args) {
//创建多个学生对象
Student xm = new Student();
//为其各个属性进行赋值
xm.name = "小明";
xm.age = 18;
xm.sex = "男";
xm.score = 80;
//并调用方法
//对象名.方法名();
xm.sayHi();
Student xh = new Student();
xh.name = "小红";
xh.age = 18;
xh.sex = "女";
xh.score = 88;
xh.sayHi();
System.out.println("=====================");
//数组定义方式
//数据类型 [] 数组名 = new 数据类型 [长度];
/*
int[] nums = new int[2];
nums[0] = a;
nums[1] = 22;
Student[] stus = new Student[2];
stus[0] = xm;
stus[1] = xh;
*/
//数据类型 [] 数组名 = new 数据类型[]{value1,value2,...};
/*
int[] nums = new int[] {a,22};
Student [] stus = new Student[] {xm,xh};
*/
//数据类型 [] 数组名 = {value1,value2,...};
/*
int nums = {a,22};
Student[] stus = {xm,xh};
*/
Student[] stus= {xm,xh};
/*
for (int i = 0; i < stus.length; i++) {
stus[i].sayHi();
}
*/
/*
* 遍历数组
for (Student num : nums) {
System.out.println(num);//11,12
}
*/
//把学生对象放入数组中并进行遍历
for (Student stu : stus) {
//xm.sayHi();
stu.sayHi();
}
}
}
类的组成
实例变量
经过实例化后的变量,局部变量,必须先赋值再使用,实例变量有默认值
整数:0
小数:0.0
字符:\u0000(空格)
布尔:false
其他:null
| 局部变量 | 实例变量 | |
|---|---|---|
| 定义位置 | 方法或方法内的结构当中 | 类的内部,方法的外部 |
| 默认值 | 无默认值 | 字面值(与数组相同) |
| 使用范围 | 从定义行到包含其结构结束 | 本类有效 |
| 命名冲突 | 不允许与局部变量重名 | 不允许与实例变量重名 可以与局部变量重名,局部变量优先 |
public class TestInstanceAndLocal {
public static void main(String[] args) {
//数据类型 变量名;
//变量名 = 值;
//局部变量
int a = 10;
System.out.println(a);
//实例变量
Cat cat =new Cat();
System.out.println(cat.breed);//null
System.out.println(cat.age);//0
System.out.println(cat.sex);//null
}
}
方法重载(Overload)
⼀个类中定义多个相同名称的方法,类名相同,返回值类型不同
特点:名称与类名完全相同,没有返回值类型,创建对象时,触发构造方法调用,不可通过句点调用
【注意】:如果没有在类中显示定义方法,则编译器默认提供无参构造方法
如果已经手动添加过有参构造了,此时有参方法不再默认提供,可结合需求自动添加(一般情况下建议添加无参构造)
/**
* 计算器类
*重载
*两同三不同
*在同一个类中,方法名相同
*参数列表不同(类型、个数、顺序)
*与访问修饰符 返回值无关
*/
public class Calculator {
//行为:方法
//求和操作
public int add(int a,int b) {
return a + b;
}
public int add(int a,int b,int c) {
return a + b + c;
}
}
public class TestCalculator {
public static void main(String[] args) {
Calculator calculator = new Calculator();
int result = calculator.add(1, 2);
System.out.println(result);
}
}
构造方法
构造方法:类中的特殊方法,用于创建对象
/**
* 定义学生类
* 属性:姓名(name)、年龄(age)、性别(sex)、分数(score)
* 方法:打招呼 sayHi()//打印学生所有信息
*/
public class Student {
//特征:属性
String name;
int age;
String sex;
double score;
//行为:方法
public void sayHi() {
System.out.println("大家好,我的名字是"+name+",今年"+age+"岁了"+"性别:"+sex+"成绩是:"+score);
}
}
/**
* 测试类
* 把学生对象放入数组中进行遍历
*/
public class TestStudent {
public static void main(String[] args) {
//创建多个学生对象
Student xm = new Student();
//为其各个属性进行赋值
xm.name = "小明";
xm.age = 18;
xm.sex = "男";
xm.score = 80;
//并调用方法
//对象名.方法名();
xm.sayHi();
Student xh = new Student();
xh.name = "小红";
xh.age = 18;
xh.sex = "女";
xh.score = 88;
xh.sayHi();
System.out.println("=====================");
//数组定义方式
//数据类型 [] 数组名 = new 数据类型 [长度];
/*
int[] nums = new int[2];
nums[0] = 11;
nums[1] = 22;
Student[] stus = new Student[2];
stus[0] = xm;
stus[1] = xh;
*/
//数据类型 [] 数组名 = new 数据类型[]{value1,value2,...};
/*
int[] nums = new int[] {11,22};
Student [] stus = new Student[] {xm,xh};
*/
//数据类型 [] 数组名 = {value1,value2,...};
/*
int nums = {11,22};
Student[] stus = {xm,xh};
*/
Student[] stus= {xm,xh};
/*
for (int i = 0; i < stus.length; i++) {
stus[i].sayHi();
}
*/
/*
* 遍历数组
for (int num : nums) {
System.out.println(num);//11,12
}
*/
//把学生对象放入数组中并进行遍历
for (Student stu : stus) {
//xm.sayHi();
stu.sayHi();
}
}
}
public class Student1 {
//特征:属性 实例变量
String name;
int age;
String sex;
double score;
//构造方法
public Student1() {
//B.构造方法执行分成两步
//1.初始化属性
//2执行构造方法中的逻辑代码
System.out.println("构造方法执行了");
}
// // new Student("小红", 15, "女", 99.0);
public Student1(String n,int a,String s,double c) {
name=n;
age=a;
sex=s;
score=c;
}
//行为:方法
public void sayHi() {
System.out.println("大家好,我的名字是:"+name+",年龄是:"+age+",性别是:"+sex+",成绩是:"+score+"分。");
}
}
/**
*1. new Student()作用?
* 实例一个对象
* Student()构造方法
*2.如何定义构造方法?
* 语法:
* 访问权限符 类名(){
*
* }
* 注意:不写返回值类型
* 3构造方法如何调用?
* new 类名();
* 4.构造方法的作用?
* A.构造对象
* B为属性赋值
*
*/
public class TestStudent1 {
public static void main(String[] args) {
//创建对象
//A.执行new Student构建对象 堆中开辟空间
//C.将构造方法的内存地址赋给引用变量
Student1 xm=new Student1();
xm.name="小明";
xm.age=16;
xm.sex="男";
xm.score=98.5;
xm.sayHi();
Student1 xh=new Student1("小红", 15, "女", 99.0);
xh.sayHi();
}
}
public class Teacher {
//特征:属性 实例变量
String name;
int age;
String sex;
double salary;
//构造方法
public Teacher() {
System.out.println("Teacher无参构造方法执行了");
}
public Teacher(String name) {
System.out.println("Teacher(name)构造方法执行了");
}
public Teacher(String name,int age) {
System.out.println("Teacher(name,age)构造方法执行了");
}
public Teacher(String name,int age,String sex) {
System.out.println("Teacher(name,age,sex)构造方法执行了");
}
public Teacher(String name,int age,String sex,double salary) {
System.out.println("Teacher(name,age,sex,salary)构造方法执行了");
}
//行为:方法
public void show() {
System.out.println(name+"\t"+age+"\t"+sex+"\t"+salary);
}
}
/**
*构造方法重载
*
*/
public class TestTeacher {
public static void main(String[] args) {
new Teacher();
new Teacher("tom");
new Teacher("tom",28);
new Teacher("tom",28,"男");
new Teacher("tom",28,"男",18000);
}
}

浙公网安备 33010602011771号