对于继承中子类中的成员方法能够覆盖掉父类的成员方法
对于成员变量,是不能覆盖的,在一个新的类里面定义一个成员变量与父类中的成员变量相同名称的时候并不会将父类的成员变量覆盖,而是将这个成员变量看作是这个新的类定义的新的成员变量
![](https://img-blog.csdnimg.cn/f3214500f7184246a7c876c6eb33006e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5oyg5aS05bCP6Lev6aOe,size_20,color_FFFFFF,t_70,g_se,x_16)
package jiCheng_duoTai;
public class FUGai {
public static void main(String[] args) {
A aa = new B();//将父类的引用指向B,将开辟的B地址赋给aa;//创建一个子类对象的时候在内存上同时创建一个父类的对象
aa.cry();//子类成员方法会覆盖父类的成员方法
System.out.println(aa.a);//结果为10,说明 成员变量不会被覆盖
}
}
class A{//创建一个父类
int a=10;//成员变量
public A() { System.out.println("父类构造方法"); }
public void cry() { System.out.println("父类cry成员方法"); }//成员方法
}
class B extends A{
int a=19;
public B() { System.out.println("子类的构造方法"); }
public void cry() { System.out.println("子类的cry成员方法"); }
}
补充说明:
你也许会对A aa = new B();这个语句调用构造方法还有疑问,接下来我来解决一个疑问:
先看下面一段代码:
public class FUGai {
public static void main(String[] args) {
A aa = new B(3);
aa.cry();
System.out.println(aa.a);
}
}
class A{//创建一个父类
int a=10;//成员变量
public A() { System.out.println("父类构造方法"); }
public A(int a) {
this.a = a;
System.out.println("2133333333321321312");
}
public void cry() { System.out.println("父类cry成员方法"); }
}
class B extends A{
int a=19;
public B() { System.out.println("子类的构造方法"); }
public B(int a) {
this.a = a;
System.out.println("sadsadsadasdsadasda");
}
public void cry() { System.out.println("子类的cry成员方法"); }
}
运行结果:
刚刚不还是调用了子类的无参构造方法吗,现在咋不调用了,但是父类的无参构造方法仍然被调用,这是为什么呢?
因为:
我们调用的是B这个类中的有参数的构造方法,所以会去调用子类B中的有参的构造方法,A是父类,但只会调用父类本身的无参的构造方法。所以你记住了吗?