面向对象三大特性之一:继承篇

继承

现实世界中,父母都是无私的,子辈可以继承父辈的财产。而在程序中,继承这一特性被描述的更加具体,类与类之间可以单继承,接口和接口之间可以多继承。子类可以调用父类所有非private修饰的属性和方法,而子类也可以拓展出父类所没有的方法和属性。

类与类之间的继承

我们就拿"树"作为例子
在这里插入图片描述
树都有树龄,也都可以成长,这是所有树的共性。而苹果树继承自树,它不但拥有树的所有特征,还拓展出了独特的方法,就是结苹果。接着代码实现

public class Tree {

	/**
	 * 树的年龄
	 */
	private int age;
	/**
	 * 树的名字
	 */
	public String name;
	
	//无参构造方法
	public Tree() {
		super();
	}
	//有参构造方法
	public Tree(int age, String name) {
		super();
		this.age = age;
		this.name = name;
	}
	/**
	 * 树的生长行为
	 */
	public void grow(){
		System.out.println(age+"岁的"
									+name+"正在生长");
	}
	
}

public class AppleTree extends Tree {

	/**
	 * AppleTree子类构造方法显式调用父类有参构造
	 * @param age 年龄
	 * @param name 名字
	 */
	public AppleTree(int age,String name){
		super(age,name);
	}
	/**
	 * AppleTree独有的结苹果行为
	 */
	public void fruit(){
		System.out.println(super.name+"结果实了!");
	}
	public static void main(String[] args) {
		AppleTree appleTree = new AppleTree(1,"苹果树");
		appleTree .grow();
		appleTree .fruit();
	}
	
}

AppleTree继承Tree,所以它可以调用父类的非私有方法,即可以调用grow()方法,细心点可以看到,Tree中的age属性是private修饰的,name是public修饰的,来测试一下

		appleTree.name = "苹果树";//编译通过,因为父类name是public修饰的,子类可以调用
		appleTree.age = 1;//编译报错,age是private修饰,父类私有,子类不可调用

在上面的代码中也可以看到,我的AppleTree子类的构造方法中,有这样一行代码 super(age,name); 这行代码的作用是:调用父类构造方法,后面的参数列表,决定着调用的是父类的哪个构造方法,当前我们后面跟了两个参数agename,所以它调用的是父类有参构造,如果是super(); 那么调用的就是父类无参构造。此时我们也了解到了"super"关键字,super译文为 超级,而父类的另一名称叫"超类" 而super关键字正是用来调用父类的属性、方法。

我写上这样的代码

//父类
public class Father {

	public Father(){
		System.out.println("父类无参构造方法");
	}
	public void fatherMethod(){
		System.out.println("父类成员方法");
	}
	
}
//子类
public class Son extends Father{

	public Son(){
		System.out.println("子类无参构造方法");
	}
	public void sonMethod(){
		super.fatherMethod();
		System.out.println("子类成员方法");
	}
	public static void main(String[] args) {
		Son son = new Son();
		son.sonMethod();
	}
	
}

运行结果为:
父类无参构造方法
子类无参构造方法
父类成员方法
子类成员方法

可见,子类构造方法中默认调用父类无参构造,我又在子类的成员方法中,使用super关键字调用了父类成员方法,所以输出以上结果

总结

Java是单继承语言,这句话不太准确。在Java中,类与类之间只能够单继承,但是接口与接口之间可以多继承。继承使得类与类之间的层次更加分明,也使得代码的复用性大大提高,继承更是多态的一个重要前提。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值