JAVA的继承细节(关于private修饰符,方法与其调用的成员属性与成员方法)

package cn.com.grammer.succeed;

class ClassA{
	private int i=1;
	private int j=1;
	private int k=1;
	public int m=0;
	public int n=0;
	public ClassA(){
		m=1;
		n=1;
	}
	public int getI(){
		return i;
	}
	public int getJ(){
		return j;
	}
	public int getK(){
		return k;
	}
	public int get(){
		return getK();
	}
}
class ClassB extends ClassA{
	private int i=2;
	private int j=2;
	private int k=2;
	public int n=0;
	public int getI(){
		return super.getI();
	}
	public int getK(){
		return k;
	}
}
public class SucceedTest {
	public static void main(String[] args){
		ClassB b=new ClassB();
		System.out.println(b.getI());//输出为1,不是2,因为方法与方法调用的成员属性是绑定的,即<strong><span style="color:#ff0000;">父类的方法调用的一定是父类的属性,即使父类的属性被private修饰</span></strong>;
		System.out.println(b.getJ());//输出为1,原因同上;
		System.out.println(b.get());//输出为2,因为方法与其调用的方法不是绑定的,即<span style="color:#ff0000;"><strong>父类中的方法get()被继承后调用的是子类的getK()方法</strong></span>;
		System.out.println(b.m);//输出为1,子类ClassB继承了父类ClassA的构造器;
		System.out.println(b.n);//输出为0,子类ClassB继承了父类ClassA的构造器,但<strong><span style="color:#ff0000;">ClassA的构造器与普通方法一样和其成员属性是绑定的,所以当子类重写了某属性,该属性在父类中由构造器初始化时,若要在子类中执行同样的初始化过程一定要重写构造器</span></strong>;
	}
}

当修改ClassB的定义,增加一个含参数的构造器时,main函数在ClassB b=new ClassB();一行会提示The constructor ClassB() is undefined,从而无法编译

所以说,若子类中没有任何构造器时,main函数中调用子类的无参构造器即调用父类的无参构造器,当子类中定义了含参构造器而没有无参构造器时,main函数中调用无参构造器则编译出错。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值