Student,封装
/**
* 面向对象的三大特征:封装性
* 当我创建完对象以后,我如果直接通过"对象名.属性名"的方式给属性赋值的话,可能会出现一些不符合实际情况的问题,
* 所有我们不考虑使用"对象名.属性名"的方式赋值,而是通过"对象名.方法名()"的方式进行赋值,因为我可以在
* 方法里面加上大量的业务逻辑,对属性值进行限制
*
* 解决方式:
* 1.将属性私有化
* 2.提供公用的(get and set)方法实现属性的取值和赋值
*
*/
public class Student {
int stuNo;//学号
String stuName;//姓名
//private:私有的,用private修饰的属性和方法只能在当前类的内部去调用
private int age;//年龄
//个人描述
public void desc(){
System.out.println("我的学号是:"+stuNo+",我叫"+stuName+",我的年龄是:"+age);
}
//给年龄属性赋值
public void setAge(int age1){
//如果年龄大于等于0岁,小于等于150岁,给age属性赋值
if(age1>=0 && age1<=150){
age=age1;
}else{
System.out.println("你输入的年龄不合法");
}
}
//定义一个方法获取年龄值
public int getAge(){
return age;
}
}
TestStudent,测试
public class TestStudent {
public static void main(String[] args) {
//创建一个学生对象
Student stu=new Student();//new的就是一个构造方法
//通过对象对属性赋值
stu.stuNo=1001;
stu.stuName="张三";
//stu.age=-18;//必须满足int类型
stu.setAge(18);
//还是可以直接通过对象名.属性名的方式赋值
//如果不让他通过stu.age方式调用属性,是不是就可以了?
//stu.age=-18;
// stu.age=-18;
//我想直接调用属性,输出age属性值
System.out.println(stu.getAge());
stu.desc();
}
}
School,构造方法
/**
* 在我们去创建对象的时候,会用到一个特殊的方法叫做构造方法,构造器
*
* 怎么去创建一个构造方法?
* public 构造方法名(形参){
* }
*
* 注意:
* 1.构造方法没有返回值
* 2.构造方法名必须和你当前类的名字一致,包括大小写
*
*
* 作用:
* 1.创建对象,new的时候就是调用了构造方法
* 2.在创建对象的同时,我们可以调用有参的构造方法直接对属性赋值
*
* 构造方法是一个方法,他可以进行方法重载吗?
* 可以
*
* 注意:
* 如果没有显示的定义构造方法,系统会默认的提供一个无参的构造方法
* 如果显示的定义了一个构造方法,系统不会在提供,需要我们手动的创建一个无参的(注意)
*
*/
public class School {
private String name;//校名
private String address;//地址
public String getName(){
return name;
}
//第一种方式使用set方法给属性赋值
public void setName(String name1){
name=name1;
}
public String getAddress(){
return address;
}
public void setAddress(String address1){
address=address1;
}
//创建一个构造方法
public School(){
System.out.println("无参构造方法执行了");
}
//
public School(String name1){
name=name1;
}
//第二种方式使用构造方法给属性赋值
public School(String name1,String address1){
name=name1;
address=address1;
}
}
TestSchool,测试
public class TestSchool {
public static void main(String[] args) {
// School sc1=new School("海大");
// System.out.println(sc1.getName());
//创建一个学校对象
System.out.println("===========使用set方法给属性赋值");
School sc=new School();//new后面就是调用了构造方法
sc.setName("国际希望小学");
sc.setAddress("山东济宁");
System.out.println("校名:"+sc.getName()+",地址:"+sc.getAddress());
System.out.println("==============使用构造方法给属性赋值");
//new对象的同时给属性赋值,省去了set方法的麻烦,针对多个属性同时赋值
School sc1=new School("枣庄学院", "枣庄");
//set针对于单个变量进行更改
sc1.setName("枣庄大学");
System.out.println("校名:"+sc1.getName()+",地址:"+sc1.getAddress());
}
}
Person,this关键字的使用
/**
* 成员变量和局部变量出现重名时,方法会根据“就近原则”使用局部变量的值,
* 如果想区分成员变量和局部变量我们可以使用this关键字
*
*格式:
*this.成员变量
*
*什么是this?
*1.this代表当前使用的对象或者是正在创建的创建的对象,通过那个对象调用了方法谁就是this
*2.this可以修饰成员变量、方法、构造方法 直接在成员变量名或者成员方法名前面加上this
*3.可以在构造方法中通过"this(形参)"的方式调用本类其他构造方法
*注意:在构造方法内部this("形参")必须放在首行
* 如果一个类里面有N个构造方法,那么最多有n-1个构造方法内部使用了this()
*
*/
//打招呼
public class Person {
private String name;//自己名字
private int age;//年龄
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
//打招呼
public void sayHello(String name){//对方的名字
System.out.println(this.name+"对"+name+"说:小老弟,来跟华子!");
this.eat();
}
//成员方法
public void eat(){
System.out.println("人吃饭");
this.age=12;//this.age=12;
}
public Person(){
this("张三");
System.out.println("Person无参构造方法");
}
public Person(String name){
this(19);
this.name=name;//改成了张三
System.out.println("Person带name参数的构造方法");
}
public Person(int age){
this("李四",18);
this.age=age;//改成了19
System.out.println("Person带age参数的构造方法");
}
public Person(String name,int age){
// this();
this.name=name;
this.age=age;
System.out.println("Person带name和age两个参数的构造方法");
}
}
TestPerson
public class TestPerson {
public static void main(String[] args) {
//创建一个人类对象
// Person p=new Person();
// p.setName("尼古拉斯赵四");//给自己的名字赋值
// p.sayHello("刘能");//给对方的名字赋值
Person p=new Person();
System.out.println(p.getName()+":"+p.getAge());
}
}