我猜这个知识点你可能会弄错。
重写:两个方法有相同的名称和相同的参数,其中一个方法位于子类,另一个方法位于这个子类的父类中。重写让子类可以在父类的基础上实现跟你更多的功能,或者实现自己的功能。
多说两句,重写是针对方法的,针对成员变量的重写有试过吗?
案例
看一下下面的代码,猜一下运行的结果是什么。
class Super {
String s = "老";
public String bark(){
return s;
}
}
class Sub extends Super {
String s = "儿子";
@Override
public String bark() {
return s;
}
}
public class FieldOverriding {
public static void main(String[] args) {
Sub c1 = new Sub();
System.out.println(c1.s);
System.out.println(c1.bark());
Super c2 = new Sub();
System.out.println(c2.s);
System.out.println(c2.bark());
}
}
定义:在一个类中,成员变量的名称和父类相同的时候会隐藏父类的成员比那里,尽管类型不同。在子类中,父类的成员变量不能通过变量名字来引用。只能,通过它的父类来访问。
最后:我们不建议这么做,这样会让代码阅读变得困难。
运行结果:
儿子 // c1.s
儿子 // c1.bark()
老 // c2.s
儿子 // c2.bark
分析
c1和c2是相同的对象,也就是相同的class,但是c2.s为父类的内容,意味着父类和子类的成员变量都是存在的。
我们也可以这样访问:
((Super) c2).s //注意这里的Super不是Java的关键字。
额外
重写和重载都会放在一起呗提到,初学者也经常弄混淆两者的概念。
重载:两个或更多个有相同的名称,但是有不同的参数。(参数个数不同,参数类型不同),与方法的返回值无关,与权限修饰符无关。类型,个数,顺序
最后
这个概念在Java的官方文档中有提到,想把Java搞明白,还是要阅读官方文档,最一手的资料。
有没有觉得这个知识点很偏呢…