java中不用setter和getter能为私有属性赋值吗?(答案是能的)

偶然间,在写代码的时候突然发现课本上的代码没有用setter方法只用了getter方法。于是我就想不用一套setter和getter可以吗?

看课本P104:
属性封装:private 属性类型 属性名称;

class Person{
	private String name;
	public void tell(){
		System.out.println("姓名"+name);
	}
}
public class Test{
	public static void main(String[] args){
		Person per = new Person();
		per.name="张三";
	}
}
程序在编译过程中会出现错误
EnTest.java:10:name has private access in Person
per.name="张三"       //错误,无法访问封装属性

因为name是私有属性,所以不能由对象直接访问。只要是被封装的属性,则必须通过setter和getter方法设置和取得。

setter设置,getter取得。

这只是常规方法

还可以用构造方法在对象实例化时直接把对象的值赋给属性。

例如:

class Test{
	private String name;		//定义了三个私有属性
	private int age;
	private char sno;

	public Test(String name,int age,char sno) {	//构造方法
		this.name=name;
		this.age=age;
		this.sno=sno;
	}
	public void say() {
		System.out.println(name+","+age+","+sno);
	}
	public String toString() { //Object 类中输出打印的方法
		return this.name;
	}
}
public class Lianxi0312 {

	public static void main(String[] args) {
		Test t1 = new Test("李阿虎",18,'a');
		t1.say();
		System.out.println(t1);//调用toString()方法
	}
}

在这段代码中没有setter和getter方法一样可以为私有属性赋值。需要学习的除了构造方法可以在实例化时直接为属性赋值外,还有构造方法中的赋值方式。
对于私有属性在构造方法中可以this.name=name;的形式,
还可以利用setter方法this.setName(name);
在输出时(say方法中)可以直接写name或this.name,
或者利用getter方法,getName()或this.getName()。

下面附上一段使用了setter和getter方法的代码:

class Test{
	private String name;
	private int age;
	private char sno;

	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 char getSno() {
		return sno;
	}
	public void setSno(char sno) {
		this.sno = sno;
	}
	public Test(String name,int age,char sno) {
		this.setName(name);
		this.setAge(age);
		this.setSno(sno);
	}
	public void say() {
		System.out.println(this.getName()+","+getAge()+","+this.getSno());
	}
	public String toString() {
		return this.getName();
	}
}
public class Lianxi0312 {
	public static void main(String[] args) {
		Test t1 = new Test("李阿虎",18,'a');
		t1.say();
		System.out.println(t1);
	}
}



注意this关键字的使用,say方法中name和age的取得方法。

运行结果:
java中不用setter和getter能为私有属性赋值吗?(答案是能的)_第1张图片

你可能感兴趣的:(java,构造方法,setter,getter)