这一章节我们来聊聊继承(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的关系。
总结:我们这一章节主要讨论了继承的概念、特性以及子类与父类之间的关系。
这一章节就到这里,谢谢。
-----------------------------------