这一章节我们来聊聊继承(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的关系。
总结:我们这一章节主要讨论了继承的概念、特性以及子类与父类之间的关系。
这一章节就到这里,谢谢。
-----------------------------------
版权声明:本文为博主原创文章,未经博主允许不得转载。