类的封装

本文通过学生、快递员、养猫等实例详细解释了面向对象编程的封装、构造方法、静态成员变量和方法的使用。展示了如何创建类、设置访问控制、构造对象、调用静态变量和方法。此外,还介绍了对象数组、套餐类的应用以及IT从业者信息的表示,涵盖了类的实例化、属性和方法的交互等核心概念。
摘要由CSDN通过智能技术生成

封装特点

把类的属性隐藏,提供公共方法对其访问
提高了代码的复用性和的安全性

学生实例

使用类的封装原则创建学生类;
成员变量包括ID、姓名、年龄、性别;
对所有成员变量进行封装。

public class T1 {
	private String ID;//学号
	private String name;//姓名
	private int age;//年龄
	private String sex;//性别
	
	public String getID() {
		return ID;
	}
	public void setID(String ID) {
		this.ID = ID;
	}
	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 String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
}
public class test {
	
	public static void main(String[] srgs) {
		T1 zhangsan = new T1();
		zhangsan.setID("1001");
		System.out.println(zhangsan.getID());
		zhangsan.setName("张三");
		System.out.println(zhangsan.getName());
		zhangsan.setAge(15);
		System.out.println(zhangsan.getAge());
		zhangsan.setSex("男");
		System.out.println(zhangsan.getSex());
	} 
}

运行结果:
在这里插入图片描述

构造方法

构造方法又称为构造器,构造方法没有返回值类型,实例化类的对象的时候,优先执行构造方法。
构造方法分别是有参数的构造器和无参数的构造器。

静态代码块,只执行一次
构造代码块,执行顺序在静态代码块和构造方法之间
普通代码块,调用时执行

快递员实例

属性: 姓名,员工编号,员工工资;
方法: 输入及输出员工信息

public class Courier {
	private String name;//姓名
	private String id;//员工编号
	private double salary;//员工工资
	
	//无参构造方法
	public Courier() {
		this.id="0001";
		this.name="张三";
		this.salary=1111;
	}
	
	//有参构造方法
	public Courier(String id,String name,Double salary) {
		this.id=id;
		this.name=name;
		this.salary=salary;
	}
	
	public void setName(String name) {
		this.name=name;
	}
	
	public String getName() {
		return this.name;
	}
	
	public void setId(String id) {
		this.id=id;
	}
	
	public String getId() {
		return this.id;
	}
	
	public void setSalary(double salary) {
		this.salary=salary;
	}
	
	public double getSalary() {
		return this.salary;
	}
}

package test1;

public class TestCourier {
	public static void main(String[] args) {
		//无参构造
		Courier zhangsan = new Courier();
		zhangsan.setName("张三");
		zhangsan.setId("123456");
		zhangsan.setSalary(1230);
		
		System.out.println(zhangsan.getName());
		System.out.println(zhangsan.getId());
		System.out.println(zhangsan.getSalary());
		
		//有参构造
		Courier lisi=new Courier("12345","马云", 1111.3);
		System.out.println(lisi.getName());
		System.out.println(lisi.getId());
		System.out.println(lisi.getSalary());

	}
}

运行结果:
在这里插入图片描述

张老太养猫的实例

张老太养了两只猫:一只叫小花,今年3岁白色。另一只叫小白,今年3岁花色。请 编写一个程序,当用户输入小猫的名字时,就显示该猫的名字、年龄、颜色。如果输入的小猫名错误,则显示:张老太没有这只猫。

public class Cat {
	static {
		System.out.println("静态代码块,只执行一次");
	}
	
	private String name;//猫的姓名
	private int age;//年龄
	private String color;//颜色
	
	public Cat(String name,int age,String color) {
		System.out.println("有参的构造方法");
		this.name=name;
		this.age=age;
		this.color=color;
	}
	
	{
		System.out.println("构造代码块,执行顺序在静态代码块和构造方法之间");
	}
	
	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 String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
}

public class TestCat {

	public static void main(String[] args) {
		Cat xiaobai = new Cat("小白", 3, "花色");
		Cat xiaohua = new Cat("小花", 3, "白色");
		
		System.out.println("请输入猫的姓名:");
		Scanner scanner=new Scanner(System.in);
		String name = scanner.next();
		
		//判断是不是小花
		if((name).equals(xiaohua.getName())) {
			System.out.println("猫的名字为:"+xiaohua.getName());
			System.out.println("猫的年龄为:"+xiaohua.getAge());
			System.out.println("猫的颜色为:"+xiaohua.getColor());
		}
		//判断是不是小白
		else if((name).equals(xiaobai.getName())) {
			System.out.println("猫的名字为:"+xiaobai.getName());
			System.out.println("猫的年龄为:"+xiaobai.getAge());
			System.out.println("猫的颜色为:"+xiaobai.getColor());
		}
		else {
			System.out.println("张老太没有这只猫");
		}
	}
}
public class TestStatic {

	public static void main(String[] args) {
		{
			System.out.println("普通代码块,调用时执行");
			
		}
		Cat c1=new Cat(null, 0, null);
		//Cat c2=new Cat(null, 0, null);
	}
}

运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

静态成员变量 、静态方法

静态方法: 用static关键字声明的方法。在静态方法中,不可以使用非静态的成员
静态成员变量: 用static关键字声明的成员变量。是该类的公用变量,在第一次使用时被初始化
静态变量 / 方法的调用: 可以通过类名访问,而无需实例化

调用静态变量/方法 实例

public class Book {
	public static String title="三国演义";//静态变量
	
	//静态方法
	public static void showBookInfo() {
		System.out.println(title);
	}
}
public class TestBook {

	public static void main(String[] args) {
		System.out.println(Book.title);//调用静态变量
		Book.showBookInfo();//调用静态方法
	}
}

运行结果:
在这里插入图片描述

对象数组

类型为对象的数组

动态对象数组
Student stu1 = new Student(“张三”,“男”);
Student stu2 = new Student(“张三”,“男”);
Student stu3 = new Student(“张三”,“男”);
Student[] student = new Student[3];//动态对象数组
student[0] = stu1;
student[1] = stu2;
student[2] = stu3;
静态对象数组
Student[] student = {stu1,stu2,stu3};//静态对象数组

套餐实例

属性: 套餐名称,价格,有效期,剩余流量;
方法:

  1. 输入套餐名称,展示套餐内容;
  2. 输入要使用的流量,看套餐够不够;
  3. 在输入使用天数,判断是否能够使用。
package test6;

public class Taocan {
	private String name;//套餐名称
	private double price;//价格
	private double time;//有效期
	private double liuliang;//剩余流量
	
	public Taocan(String name,double price,double time,double liuliang) {
		this.name=name;
		this.price=price;
		this.time=time;
		this.liuliang=liuliang;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}
	public double getTime() {
		return time;
	}
	public void setTime(double time) {
		this.time = time;
	}
	public double getLiuliang() {
		return liuliang;
	}
	public void setLiuliang(double liuliang) {
		this.liuliang = liuliang;
	}
}

/**
 *测试类
 **/
public class TestTaocan {
	
	public static void main(String[] args) {
		Taocan taocan1 = new Taocan("网虫", 50, 20, 1024);
		Taocan taocan2 = new Taocan("超人", 40, 10, 1000);
		Taocan taocan3 = new Taocan("话痨", 30, 5, 500);
		
		Taocan[] tc = new Taocan[3];//动态对象数组
		tc[0] = taocan1;
		tc[1] = taocan2;
		tc[2] = taocan3;
		
//		Taocan[] tc1= {taocan1,taocan2,taocan3};//静态对象数组
		
		System.out.println("请输入套餐名称:");
		Scanner scanner = new Scanner(System.in);
		String name = scanner.next();//套餐名称
		
		int m = 0;//未查询到套餐名称的次数
		for(int i=0;i<tc.length;i++) {
			if(name.equals(tc[i].getName())) {
				System.out.println("套餐名称为:"+tc[i].getName());
				System.out.print("价格为:"+tc[i].getPrice());
				System.out.print("\t有效期为:"+tc[i].getTime());
				System.out.println("\t剩余流量为:"+tc[i].getLiuliang());
				
				System.out.println("请输入要使用的流量:");
				double liuliang = scanner.nextDouble();
				if(liuliang <= tc[i].getLiuliang()) {
					System.out.println("套餐流量满足您的需求。");
					
					System.out.println("请输入要使用的时间:");
					double time = scanner.nextDouble();
					if(time <= tc[i].getTime()) {
						System.out.println("套餐使用时间满足您的需求。");
					}
					else {
						System.out.println("该套餐不满足您的需求,请选择其他套餐!!");
					}
				}
				else {
					System.out.println("该套餐不满足您的需求,请选择其他套餐!!");
				}
			}
			else {
				m++;
			}
		}
		if(m==3) {
			System.out.println("输入错误,请重新输入!!!");
		}
	}
}

运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

描述狗的实例

设定属性包括:品种,年龄,心情,名字;
方法包括:叫(心情好),跑(心情不好)
要求:
1、设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问
2、限定心情只能有“心情好”和“心情不好”两种情况,如果无效输入进行提示,默认设置“心情好”。
3、设置构造函数实现对属性赋值
4、叫和跑的方法,需要根据心情好坏,描述不同的行为方式。
5、编写测试类,测试狗类的对象及相关方法(测试数据信息自定义)

public class Dog {
	
	private String kind;//品种
	private int age;//年龄
	private String mood;//心情
	private String name;//名字
	
	public Dog(String name,int age,String kind,String mood) {
		this.name = name;
		this.age = age;
		this.kind = kind;
		this.mood = mood;
	}
	
	public String getKind() {
		return kind;
	}
	public void setKind(String kind) {
		this.kind = kind;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getMood() {
		return mood;
	}
	public void setMood(String mood) {
		this.mood = mood;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}	
}

public class Call {
	public void call(Dog d) {
		if(!("心情不好").equals(d.getMood()) && !("心情好").equals(d.getMood())) {
			System.out.println("一只"+"叫"+d.getName()+"\t"+d.getAge()+"岁的"+d.getKind()+"心情好");
			System.out.println("无效输入");
			System.out.println("狗狗:叫");
		}
		else if(("心情好").equals(d.getMood())) {
			System.out.println("一只"+"叫"+d.getName()+"\t"+d.getAge()+"岁的"+d.getKind()+"心情好");
			System.out.println("狗狗:叫");
		}
	}
}

public class Run {
	public void run(Dog d) {
		
		if(("心情不好").equals(d.getMood())) {
			System.out.println("一只"+"叫"+d.getName()+"\t"+d.getAge()+"岁的"+d.getKind()+"心情不好");
			System.out.println("狗狗:跑");
		}
	}
}
public class TestDog {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入狗狗的心情状态:");
		String mood = scanner.next();//输入心情
		
		Dog dog = new Dog("二哈", 5, "哈士奇",mood);
		
		Call call = new Call();
		call.call(dog);
		
		Run run = new Run();
		run.run(dog);
	}
}

运行结果:
在这里插入图片描述
在这里插入图片描述

描述卡车信息的实例

属性:车牌号、车型、颜色、日租金、载重量
方法:租赁
要求:
1、设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问
2、租赁方法通过输入参数,接收租车人姓名和租赁时间,描述租赁状态,要求判断租赁时间的有效性。
3、设计构造函数实现属性赋值
4、编写测试类,测试卡车类的对象及相关方法(测试数据信息自定义)

public class Car {
	
	private String id;//车牌号
	private String kind;//车型
	private String color;//颜色
	private double money;//日租金
	private double weight;//载重量
	
	public Car(String id,String kind,String color,double money,double weight) {
		this.id = id;
		this.kind = kind;
		this.color = color;
		this.money = money;
		this.weight = weight;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getKind() {
		return kind;
	}
	public void setKind(String kind) {
		this.kind = kind;
	}
	public String getColor() {
		return color;
	}
	public void setColor(String color) {
		this.color = color;
	}
	public double getMoney() {
		return money;
	}
	public void setMoney(double money) {
		this.money = money;
	}
	public double getWeight() {
		return weight;
	}
	public void setWeight(double weight) {
		this.weight = weight;
	}
	
}

public class Person {
		
	private String name;//姓名
	private double time;//时间
	
	public Person(String name,double time) {
		this.name = name;
		this.time = time;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getTime() {
		return time;
	}
	public void setTime(double time) {
		this.time = time;
	}
	
}
public class TestCar {

	public static void main(String[] args) {

		System.out.println("**欢迎进入出租公司车辆管理系统**");
		System.out.println("请输入租车人姓名和租赁时间(天):");
		Scanner scanner = new Scanner(System.in);
		String name = scanner.next();
		double time = scanner.nextDouble();
		
		Car car = new Car("蒙C00000","SUV", "黑色", 1000, 100);
		Person person = new Person(name, time);
		//最多租用10天
		if(person.getTime() <= 10){
			System.out.println(person.getName()+"已租贷"+person.getTime()+"天");
			System.out.println("未到租贷时间");
			System.out.println("您租用的车牌号为"+car.getId());
			System.out.println("您租用的车型为"+car.getKind());
			System.out.println("您租用的颜色为"+car.getColor());
			System.out.println("您租用的日租金为"+car.getMoney()+"元");
			System.out.println("您租用的载重量为"+car.getWeight()+"kg");
		}
		else {
			System.out.println(person.getName()+"已租贷"+person.getTime()+"天");
			System.out.println("您的租贷时间过,请及时还车");
		}
	}
}

运行结果:
在这里插入图片描述
在这里插入图片描述

描述IT从业者的实例

设定属性包括:姓名,年龄,技术方向,工作年限;
要求:
1、设置属性的私有访问权限,通过公有的get,set方法实现对属性的访问
2、限定IT从业人员必须年满15岁,无效信息需提示,并设置默认年龄为15。
3、工作方法通过输入参数,接收工作单位和职务,输出个人工作信息
4、编写测试类,测试IT从业者类的对象及相关方法(测试数据信息自定义)

public class Worker {

	private String name;//姓名
	private int age;//年龄
	private String direction;//技术方向
	private double time;//工作年限
	
	public Worker(String name,int age,String direction,double time) {
		this.name = name;
		this.age = age;
		this.direction = direction;
		this.time = time;
	}
	
	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 String getDirection() {
		return direction;
	}
	public void setDirection(String direction) {
		this.direction = direction;
	}
	public double getTime() {
		return time;
	}
	public void setTime(double time) {
		this.time = time;
	}
}

public class TestWorker {
	public static void main(String[] args) {
	
		System.out.println("请输入该员工的年龄:");
		Scanner scanner = new Scanner(System.in);
		int age = scanner.nextInt();
		Worker worker = new Worker("张三", age, "java开发", 3);
		
		if(worker.getAge() < 15) {
			System.out.println("无效信息");
			System.out.println(worker.getName()+"\t15岁\t"+worker.getDirection()+"\t"+"年限"+worker.getTime()+"年");
		}
		else {
			System.out.println(worker.getName()+"\t"+worker.getAge()+"岁\t"+worker.getDirection()+"\t"+"年限"+worker.getTime()+"年");
		}
	}
}

运行结果:
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值