继承

继承

Java中子类与父类的继承通过关键字 extends 来实现 ,例如,定义一个父类Person :

class Person {
	private String name ;
	private int age ;
	public String getName() {} ; 
	public void setName(String name) {};
	public int getAge() {};
	public void setAge(int age) {};
}
class Student extends Person {
	//对继承的字段和方法不要重复 ;
	//只需要定义新增score字段/方法 ;
	private int score ;
	public int getScore() {} ;
	public void setScore(int score) {} ;
}

但是 , 值得注意的是 , 即使子类继承了private字段或者private方法 , 但是子类却无法访问它们 。因为用private修饰的字段和方法 , 只允许在类内部被访问(即实例对象的内部被访问):

class Person {
	private String name ;
	private int age ;
}
class Student extends Person {
	public String hello() {
		return "Hello , "+name ;  //编译错误:无法访问name字段 ;
	}
}

这使得继承的作用被削弱了。为了让子类可以访问父类的字段 , 可以把修饰符private改为protected。用protected关键字可以把字段和方法的访问权限控制在继承树的内部,一个protected的字段和方法可以被其子类,以及子类的子类所访问 :

class Person {
	protected String name ;
	protected int age ;
}
class Student extends Person {
	public String hello {
		return "Hello,"+name ; //可以正常编译通过 ;
	}
}

每个子类构造方法的第一条语句都是调用父类的构造方法,以便对从父类继承下来的字段进行合乎规范的初始化(这种规范就是父类构造函数),并且也是对父类构造函数代码的高效复用,分为几种情况 :

  1. 开发者没有显示的使用super关键字调用父类的构造函数,那么编译器将自动在子类构造函数的第一行添加空参数的super()语句,这种情况下 , 可能就会出现编译错误 ;
  2. 开发者用super(…)调用了在父类中参数匹配的一个构造函数 ;

1中提到”可能会出现编译错误“,具体来说就是 , 若开发者已经在父类中自定义了一个或多个”有参数但参数不同构造方法“,那么编译器自动在子类构造方法中加上的super()将导致编译错误 , 因为父类中并没有无参的构造方法。

还值得注意的是,需要用super()来调用父类构造方法,证明父类的构造函数不会被子类所继承 ;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值