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);
	}
}
posted @ 2021-07-22 22:02  CN_Darren  阅读(29)  评论(0)    收藏  举报