为什么说重写属性是无意义的,能讲明白么?

long615 2012-07-17 05:36:59
因为属性是需要封装的,所以重写属性是无意义的。这个是我在书上看到的一句话,不理解,谁帮忙解释一下的!
感激不尽啊!
...全文
315 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
int420 2012-07-17
  • 打赏
  • 举报
回复
还真是两个pet
金墨痴 2012-07-17
  • 打赏
  • 举报
回复
我也不懂
a395885670 2012-07-17
  • 打赏
  • 举报
回复
属性是不具有多态这一特性的 在类的内部自身访问时 会访问当前所在类的属性
xhm0616 2012-07-17
  • 打赏
  • 举报
回复
只有方法能重写
brightyq 2012-07-17
  • 打赏
  • 举报
回复
属性没有重写的说法。
子类中有了名称一样的属性,是隐藏了父类的属性,实际上用super.属性名,还是可以得到父类的非private属性.
di_wq 2012-07-17
  • 打赏
  • 举报
回复
重写只发生在方法里面,不包括属性子类继承父类后,如存在同名、同参、同返回值的方法,子类方法会重写父类的同名方法,那么如果父子存在相同的属性名会重写吗?参见如下代码:
public class Pet {
public String name ;

public String getName() {
return name;
}
public Pet(){
this.name = "pet";
}
}
public class Dog extends Pet {
public String name;
public Dog(){
this.name = "dog";
}

}
public static void main(String[] args) {
Pet pet = new Dog();
System.out.println(pet.name);
System.out.println(pet.getName());
}
系统运行后,输出结果为两个"pet",而没有任何"dog",为什么?
原来多态仅针对实例方法,与实例的属性无关。
如果修改Dog类,增加getName方法后,输出结果如何?
public class Dog extends Pet {
public String name;
public String getName() {
return name;
}
public Dog(){
this.name = "dog";
}
}
输出结果为"pet" 和"dog",这验证了上述的结论:重写只对方法有效,对属性无效!
gdsatan 2012-07-17
  • 打赏
  • 举报
回复
属性有重写一说?没有吧,只有方法能重写
jiakai0419 2012-07-17
  • 打赏
  • 举报
回复


public class Son extends Father{
public int x = 10;

public void p(){
System.out.println(super.x);
System.out.println(this.x);
}

public static void main(String[] args){
Son s = new Son();
s.p();
}
}





结果
5
10

所以没有你所说的,属性重写。

其实是因为,子类对象内隐式封装了一个基类对象。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧