目录
一、 继承概念
1、语法
2、 实例
3、 总结
二、 继承的内存结构
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
通俗一点:描述事物的时候,如果发现这几个类有重复的属性和方法,就可以采用继承的方式来设计。
在Java中,使用关键字extends来继承!
class 子类 extends 父类 {
子类属性;
子类方法;
}
特点:子类会把父类的所有属性和方法继承下来(暂时不考虑final)。
请看下面举的栗子就啥都明白了~
class Teacher{ String name; int age; public void sleep(){ System.out.println("老师正在睡觉...."); } } /** * 定义子类 */ class MathTeacher extends Teacher{ public void teachMath(){ System.out.println("数学老师在上课....."); } } class ChineseTeacher extends Teacher{ public void teachChinese(){ System.out.println("语文老师在上课..."); } } class ExtendsDemo { public static void main(String[] args) { MathTeacher mt =new MathTeacher(); mt.name="数学老师"; mt.age=28; mt.teachMath(); mt.sleep(); System.out.println("我是"+mt.name+",我今年"+mt.age); System.out.println("----------------------------------"); ChineseTeacher ct = new ChineseTeacher(); ct.name="语文老师"; ct.age=50; ct.teachChinese(); ct.sleep(); System.out.println("我是"+ct.name+",我今年"+ct.age); } }运行结果
1、 如果父类中包含了某些类中的共同属性和行为,我们可以使用继承来设计程序。
2、子类使用extends关键字继承父类的共同属性意外,子类还可以有自己特有的属性或方法。
3、 父类更通用,子类更加具体。
4、 子类只能获得父类的非private的属性,如果想要继承就得提供公共的set和get的方法。私有的方法子类无法继承。
5、 在Java中只能做单继承(如,class A extends B{ } ,那什么叫多继承呢?如class A extends B,C{ })。
6、 Java支持多级继承(如 class A extends B{ } class C extends B{ })。
继承的好处:提高了代码的复用性。
下面就上面的实例分析。
和文件同名的类为主类,主类ExtendsDemo先进栈,main方法进栈。mt是MathTeacher的一个对象,mt指向堆中它自己所在的地址,然后找到在栈中的内存空间。当mt在找name这个属性的时候,会到栈中去找,当然这个name的属性并不存在0x666这个内存空间里面,然后会到父类中去找。在this里面有一个存在super、name属性等的实例,找到之后给name赋值“DJun”,mt找age也是相同的方法。之后加载teachMath到方法区,接着入栈。