通过对象给属性赋值是给对象中的属性赋值而不是给原方法中成员属性赋值,对吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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
同学你好,
同学可能对类和对象还是有些误解的。老师再给同学举个例子:
类是独立存在的,而实现类是独立的。
类就好比是一个模型,而实现类就好比是拿着模型造出来的东西。
Cat类可以看做一个模型,而实例化的one two,three等都是根据模型做出来的Cat的实例对象。
他们是相互独立的。
就好比,你给猫咪 one 起了名字,并不是所有的猫咪都有了名字。仅仅是猫咪one有了名字而已。
当你Cat one = new Cat();的时候,就相当于根据模型Cat,创建了一个小猫one。 你给它起名字叫“好”
当你Cat two = new Cat();的时候,就相当于根据模型Cat,创建了一个小猫two。 你给它起名字叫“坏”
他们两个是独立的而Cat 只是一个模型而已。
当然,如果Cat中有一个静态的属性,则静态属性是最后被赋值的值,大家共享同一个属性。
所以,当你给one的属性赋值后,通过two去调用属性,是调用不出来one的属性的。
面向对象的思想是有些抽象的,还请同学可以反复听一下课程哦
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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属性赋值吗?封装不久没有意义了吗(无法给原类中的属性赋值,永远是只读功能)
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧