子类能否获得父类的所有域和方法?

子类能否获得父类的所有域和方法,到现在我还没有结论。不过子类不能继承父类的private方法和final方法那是肯定的。

 

 

 现象:

 

父类中private方法不可以被继承,也不可以被覆盖。因为都不可以被继承了所有覆盖从何说起。但是子类可以有相同名称的方法,不过此方法与父类的private方法毫无关系。只是名字相同的两个毫无关系的方法而已。

 

父类中final方法的意境比private更加苛刻。原因是除了final方法不可以被覆盖不可以被继承以外,在子类中不可以有相同名称的方法出现。

 

 

究其原因:

 

private的由头是它只被类内可见,作用域只在本类当中。子类对其不可见也就没法继承了。子类中有与父类私有方法重名的也就可以解释的通了。重了?我不知道。我又看不见! 但是与父类的那个同名方法真啥没关系。只是个巧合。

 

 

 final的由头是它不可被子类覆盖。不让覆盖,在子类中当然不可能出现了。不管是想从父类继承到子类,还是子类中一不小心与父类final方法重名了。都不可以。不可覆盖就是不可出现!

 

一个例子:

 class Test1 {

	public void f1() {
		System.out.println("f1");
	}

	/** 无法被子类覆盖的方法
	*不可覆盖比private恨。父类私有的f4,子类可以出现同名方法f4(虽然与父类的f4一点关系没有)。
	但是不可覆盖的意思是说,子类不可以出现这个方法!*/
	 final void f2() {
		System.out.println("f2");
	}

	public void f3() {
		System.out.println("f3");
	}
	/**子类有骨气,不要父类的f4。自己写个f4也可以。
	 * 但这个f4方法就和父类的f4没有一点关系了。(不是继承而来的)只不过他俩的名字相同而已。
	 */
	
	private void f4() {
		System.out.println("f4");
	}
}

public class Test2 extends Test1 {

	public void f1() {
		System.out.println("Test1父类方法f1被覆盖!");
	}
//不可以覆盖f2。这里是错误的。	
//	public void f2() {
//		System.out.println("Test1父类方法f1被覆盖!");
//	}
//	
	public void f4() {
		System.out.println("f44");
	}

	public static void main(String[] args) {
		Test2 t = new Test2();
		t.f1();
		t.f2(); // 调用从父类的final方法
		t.f3(); // 调用从父类继承过来的方法(虽然看不见f3但是的确存在于子类中) 
		t.f4(); //如果子类里没有自己的f4。这里就调用的是父类的。调用会失败,无法从父类继承获得

	}
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值