面向对象三大特征---继承

继承的概念

继承是一种类与类的关系,就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为,继承是实现代码复用的一种方式,继承实现了面向对象模块的层次性。被继承的类叫做基类或父类,继承后产生的新类叫派生类或子类。
在这里插入图片描述
上图所示是一个具有三级层次的继承结构,动物是食草动物、食肉动物的基类,食草动物是兔子、羊的父类;兔子、羊又是食草动物的子类;食草动物、食肉动物是动物的子类。

继承的实现

C++可以实现多继承,java、C#等大部分程序语言仅允许实现单继承。继承是为了复用父类代码的一种机制,使用继承时必须深刻了解,父类代码和子类代码的执行顺序,以下已java为例,展示父类与子类方法的执行顺序,java的继承是使用extend关键字实现的。

  1. new一个类对象,类中各部分执行顺序,示例代码如下:
public class BaseMember {
    static {
        System.out.println("base static code exec");
    }
    {
        System.out.println("base non static code exec");
    }
    public BaseMember(){
        System.out.println("执行构造函数内容");
    }
    public void sayHello(){
        System.out.println("base hello word");
    }
}

main中代码为:

 BaseMember baseMember = new BaseMember();
 baseMember.sayHello();

执行结果为:

base static code exec  //静态代码块
base non static code exec //非静态代码块
执行构造函数内容 //构造函数
base hello word //具体方法

new一个类对象,类中各部分执行顺序:静态代码块—非静态代码块—构造函数—一般方法

  1. 创建一个子类对象时代码执行顺序
    给baseMenber创建一个子类goldenMenber,代码如下:
public class GoldenMenber extends BaseMember {
    static {
        System.out.println("goldenMenber static code exec");
    }
    {
        System.out.println("goldenMenber non static code exec");
    }
    public GoldenMenber(){
        System.out.println("goldenMenber构造函数");
    }
    public void sayHello(){
        System.out.println("goldenMenber hello word");
    }
}

main中调用代码如下:

GoldenMenber goldenMenber = new GoldenMenber();
goldenMenber.sayHello();

执行结果如下:

base static code exec //父类静态代码块
goldenMenber static code exec //子类静态代码块
base non static code exec//父类非静态代码块
执行构造函数内容 //父类无参构造函数
goldenMenber non static code exec//子类非静态代码块
goldenMenber构造函数//子类构造函数
goldenMenber hello word //子类具体方法

new 一个子类对象时,代码执行顺序为:
父静态代码块–子静态代码块–父非静态代码–父无参构造函数–子静态代码块–子构造函数–方法。

  1. 子类执行父类定义的有参构造函数时,代码写法:
 public GoldenMenber(){
        super("父类有参构造函数");
        System.out.println("goldenMenber构造函数");
    }

此时,代码将不执行父类无参构造函数,执行结果如下:

base static code exec //父类静态代码块
goldenMenber static code exec //子类静态代码块
base non static code exec//父类非静态代码块
父类有参构造函数执行构造函数内容 //父类有参构造函数
goldenMenber non static code exec//子类非静态代码块
goldenMenber构造函数//子类构造函数
goldenMenber hello word //子类具体方法
  1. 子类执行父类定义方法,上述示例中子类将父类的方法重置,如果需要执行父类的方法时,使用super.方法名,调用父类代码,代码如下:
public void sayHello(){
        super.sayHello();
        System.out.println("goldenMenber hello word");
    }

执行结果如下:

base hello word    //父类方法执行
goldenMenber hello word //子类方法执行

继承的好处

实现了子类对父类方法的复用,并能扩展新的属性和方法,同时继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值