Java之封装

目录

 

对象和类

类的定义

 使用类创建对象

 实例

 类的成员封装

public公有封装

private私有封装

protected保护封装 

不进行封装

实例 

构造方法

定义构造方法

​使用构造方法

 实例

this关键字

实例


 

对象和类

类的定义

  • Java程序至少由一个或一个以上的类构成,但只有一个公有类,即使用public关键字修饰的类的名称必须跟和程序文件名称一致。
  • 类是由方法成员和数据成员组成

f445dc670729472ea6f733b32b273dc2.jpeg

 使用类创建对象

创建对象

6e4a314582994cd1a72bcaf0b5d77199.jpeg

 创建对象的内存分配

f305b57dec114f11bb25fceb86f4c593.jpeg

 实例

/*

定义类,一个Java程序可以定义多个类,但只能定义一个与程序名称相同的公有类
[修饰符] Class 类名{
	
	数据成员;
	.
	.
	.
	方法成员;
	.
	.
	.
	
}
 
*/
class Student{
	int age;
	String name;
	char gender;
	double score;
	
	void msgPrintf(){
		System.out.println("name is " + name);
		System.out.println("age is " + age);
		System.out.println("gender is " + gender);
		System.out.println("score is " + score);
	}
} 


public class Demo1 {
	public static void main(String[] args) {
		
		//创建对象
		//方式1:先声明再使用new关键字创建
		Student s1;  //声明某个对象属于某个类:类名 对象名;
		s1 = new Student();  //使用new关键字创建对象
		
		s1.age = 20;
		s1.name = "jiangxiaoya";
		s1.gender = '女';
		s1.score = 99.9;
		s1.msgPrintf();
		System.out.println();
		
		//方式2:声明对象的同时并使用new关键字创建对象
		Student s2 = new Student();
		s2.age = 21;
		s2.name = "haozige";
		s2.gender = '男';
		s2.score = 66.6;
		s2.msgPrintf();
		System.out.println();
		
		//方式3:不声明对象,直接使用new关键字,该方式无法向方法传参
		new Student().age = 18;
		new Student().name = "zhutoucai";
		new Student().gender = '女';
		new Student().score = 88.8;
		new Student().msgPrintf();
	}	
}

bc9bb33f61f74137b9be126e435f2ffa.png

 类的成员封装
 

public公有封装

  • 定义类时,类的数据成员或方法成员使用public关键字修饰
  • 这种封装下的成员允许任何类访问 

private私有封装

  • 定义类时,类的数据成员或方法成员使用private关键字修饰
  • 这种封装下的成员只允许自身所在的类进行访问,其他类不能访问

protected保护封装 

  • 定义类时,类的数据成员或方法成员使用protected关键字修饰
  • 这种封装下的成员只允许自身所在的类或者继承自身类的子类或者同一个包中的类进行访问,其他类不能访问

不进行封装

  • 定义类时,类的数据成员或方法成员不使用任何关键字修饰
  • 同一个包中的类能进行访问

实例 

class Student{
	//private关键字,只有该类才能访问,私有成员
	//public关键字,该类或非该类均可以访问,公有成员
	//protected关键字,该类及其子类的成员可以访问,同一个包中的类也可以访问
	//默认,同一个包中的类可以访问
	
	private int age;  //私有成员
	protected String name;  //保护成员
	char gender;
	double score;
	
	void msgPrintf(){
		System.out.println("name is " + name);
		System.out.println("age is " + age);
		System.out.println("gender is " + gender);
		System.out.println("score is " + score);
	}
	
	void inputAge(){
		age = 21;
	}
} 


public class Demo1 {
	public static void main(String[] args) {
		
		Student s2 = new Student();
		//s2.age = 21;  由于Student类中的数据成员age是私有成员,因此不能直接访问它
		s2.inputAge();  //间接访问私有成员
		s2.name = "haozige";  //同一个包中的类也能访问保护成员
		s2.gender = '男';
		s2.score = 66.6;
		s2.msgPrintf();
		System.out.println();
		

	}	
}

4fcd80c61a3b48b9b009aaf491dd774e.png

构造方法

构造方法主要用于在使用new关键字创建对象时同时传递参数进行数据成员的初始化

定义构造方法

构造方法在定义类中定义
类名称(参数列表){
       赋值语句;
}

dc1b04559515484e9ddde9e1e0799fa6.jpeg  使用构造方法

类名称 对象名 = new 类名称(参数列表)

2378879238dc4bddaa46925ae99302de.jpeg

 实例

class Student{
	private int age;  //即使是私有成员,在创建对象时一样能进行初始化
	String name;
	char gender;
	double score;
	
	void msgPrintf(){
		System.out.println("name is " + name);
		System.out.println("age is " + age);
		System.out.println("gender is " + gender);
		System.out.println("score is " + score);
	}
	
	//构造方法1
	Student(int newage,String newname,char newgender,double newscore){
		age = newage;
		name = newname;
		gender = newgender;
		score = newscore;
	}
	
	//构造方法一样可以进行方法重载
	Student(int newage,String newname){
		age = newage;
		name = newname;

	}
}

public class Demo3 {
	public static void main(String[] args) {
		
		//创建对象时想同时传递参数进行数据成员的初始化时可以使用构造方法
		Student s1 = new Student(21,"haozige",'男',66.6);  //对应定义类Student的构造方法1
		s1.msgPrintf();
		System.out.println();
		
		Student s2 = new Student(20,"jiangxiaoya");  //对应定义类Student的构造方法2
		s2.msgPrintf();
	}
}

6abae8e116294f9aa5441b013ce53354.png

this关键字

  • this关键字调用本类数据成员或者方法
  • this关键字在构造方法首条语句调用其他构造方法
  • this关键字解决方法中数据成员变量命名冲突的问题
  • this关键字看作一个变量时,值为调用此方法的对象 

实例

class Student{
	int age;
	String name;
	int sex;
	double sorce;
	
	//构造方法1
	Student(){
		System.out.println("我是构造方法1");
	}
	
	//构造方法2(方法重写)
	Student(int age,String name,int sex,double sorce){
		this();  //在构造方法中使用this关键字调用其他构造方法
		
		//this关键字解决形参同名的问题
		this.age = age;
		this.name = name;
		this.sex = sex;
		this.sorce = sorce;
	}

	void msgPrintf(){
		System.out.println(this.age);  //this关键字调用本类的数据成员或者方法
	}
	
	void myPrintf(){
		
		this.msgPrintf();  //this关键字调用本类的数据成员或者方法
		
		//this关键字看作一个变量,值为为调用此方法的对象
		Student stutmp = this; 
		System.out.println(stutmp.name);
		
	}
}

public class Text {
	public static void main(String[] args) {
		Student stu1 = new Student(20,"jiangxiaoya",0,99.5);
		
		stu1.myPrintf();
		
	}
}

ebc7eddc297b49b6a8e72653b1be5b2b.png

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值