通过对象给属性赋值是给对象中的属性赋值而不是给原方法中成员属性赋值,对吗?

通过对象给属性赋值是给对象中的属性赋值而不是给原方法中成员属性赋值,对吗?

public class Cat {
	//成员属性:昵称、年龄、体重、品种
	//修改属性的可见性---private 限定只能在当前类被访问
	private static String name;//昵称
	private int month;//年龄
	private double weight;//体重
	private String species;//品种
	
	public  int price;//售价
	
	static {
		Cat four = new Cat();
		System.out.println(four.price);
	}
}
public class Test {
	public static void main(String[] args) {
		Cat one = new Cat();
		one.setName("花花");
		one.setMonth(2);
		one.setSpecies("英国短毛猫");
		one.price = 2000;
		
		Cat two = new Cat();
		two.setName("凡凡");
		two.setMonth(1);
		two.setSpecies("中华田园猫");
		two.price = 150;
		
		Cat three =new Cat();
		System.out.println(three.price);

试了一下Cat类中的four.price,Test中的three.price,one.price和two.price中只有通过自己给成员属性赋值的对象one和two才有price值,意思是在实例化中,对象获得了类的成员属性,并在赋值时(无论是=直接赋值还是通过set赋值)都只是赋给了对象中的属性,而原本类的属性(例如本视频中的name,month,species)都并没有被赋值是吗?只有对象中的属性才有值?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕阿莹 2019-12-27 11:38:22

同学你好,

同学可能对类和对象还是有些误解的。老师再给同学举个例子:

类是独立存在的,而实现类是独立的。

类就好比是一个模型,而实现类就好比是拿着模型造出来的东西。

Cat类可以看做一个模型,而实例化的one two,three等都是根据模型做出来的Cat的实例对象。

他们是相互独立的。

就好比,你给猫咪 one 起了名字,并不是所有的猫咪都有了名字。仅仅是猫咪one有了名字而已。

当你Cat one = new Cat();的时候,就相当于根据模型Cat,创建了一个小猫one。 你给它起名字叫“好”  

当你Cat two = new Cat();的时候,就相当于根据模型Cat,创建了一个小猫two。 你给它起名字叫“坏”

他们两个是独立的而Cat 只是一个模型而已。

当然,如果Cat中有一个静态的属性,则静态属性是最后被赋值的值,大家共享同一个属性。

所以,当你给one的属性赋值后,通过two去调用属性,是调用不出来one的属性的。

面向对象的思想是有些抽象的,还请同学可以反复听一下课程哦

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  

提问者 慕数据0164170 2019-12-27 10:33:16
public class Cat {
	String name;
	public String situ() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Cat one = new Cat();
		one.name = "好";
		System.out.println(one.name+".."+one.situ());
		Cat two = new Cat();
		System.out.println(one.name+".."+two.situ());
		two.name ="坏";
		System.out.println(one.name+".."+two.situ());
		System.out.println(two.name+".."+two.situ());
		one.setName("很好");
		Cat three = new Cat();
		System.out.println(three.name+".."+one.situ());
	}

}

运行结果

好..好

好..null

好..坏

坏..坏

null..很好

现在有点迷糊了,我用one.name给name="好"赋值了之后,two.name仍然是null,用one.setName="很好"赋值了之后three.name也是null,那么通过对象无法给name属性赋值吗?封装不久没有意义了吗(无法给原类中的属性赋值,永远是只读功能)

  • 你的属性name并不是私有的(private),所以你的setname方法是无效的,另外one.name给对象1的name属性赋值了好所以能输出值,而对象2的name属性却没有任何赋值语句
    2019-12-27 15:38:33
  • 后面two.name给对象2的属性赋值了坏所以能输出出来
    2019-12-27 15:41:08
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师