从头认识java-6.2 继承(Generalization)(1)

这一章节我们来聊聊继承(Generalization)。

1.概念

继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

 

2.特点

子类继承父类public和protected的属性域与方法,但不继承private的属性域和方法。

当子类基础父类的方法时,如果需要,可以覆盖(@override),重新实现。

下面是一个例子

package com.ray.testobject;

public class Test {

	public static void main(String[] args) {
	}
}

class Father {
	private int id;

	protected String name;

	public int sex;

	private void methodA() {
	}

	protected void methodB() {
	}

	public void methodC() {
	}

	public Father() {
		System.out.println("create father");
	}
}

class Sub extends Father {
	@Override
	protected void methodB() {
		// TODO Auto-generated method stub
		super.methodB();
	}

	@Override
	public void methodC() {
		// TODO Auto-generated method stub
		super.methodC();
	}

	public Sub() {
		System.out.println("create Sub");
		// System.out.println(id);//报错
		System.out.println(name);
		System.out.println(sex);
	}
}


 

3.跟父类的关系

我们修改上面的代码来解释,is-a 是一个和is-like-a 像一个

package com.ray.testobject;

public class Test {

	public static void main(String[] args) {
	}
}

class Father {
	private int id;

	protected String name;

	public int sex;

	private void methodA() {
	}

	protected void methodB() {
	}

	public void methodC() {
	}

	public Father() {
		System.out.println("create father");
	}
}

class Sub1 extends Father {
	public Sub1() {
		System.out.println("create Sub");
		// System.out.println(id);//报错
		System.out.println(name);
		System.out.println(sex);
	}
}

class Sub2 extends Father {
	private void say() {
	}

	public Sub2() {
		System.out.println("create Sub");
		// System.out.println(id);//报错
		System.out.println(name);
		System.out.println(sex);
	}
}


我们来看一下上面的代码,sub1是直接继承father,而且没有其他的不同的方法,因此sub1是father的子类,是is-a关系;

而sub2,除了继承father,还多了一个say 的方法,因此它跟father不完全相同,因此,它虽然是father的子类,但它们直接的关系是is-like-a的关系。

 

总结:我们这一章节主要讨论了继承的概念、特性以及子类与父类之间的关系。

 

这一章节就到这里,谢谢。

-----------------------------------

目录

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted on 2015-10-29 23:23  李灵晖  阅读(137)  评论(0编辑  收藏  举报