面向对象_继承_多态_封装

什么是继承:

后代继承先辈的特征和行为,使得子类具有父类的各种属性和方法。或子类从父类继承方法,使得子类具有父类相同的行为

 

为什么需要继承?什么时候应该继承?

使用继承可以有效实现代码复用,避免重复代码的出现。

当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它两个类继承这个父类。

如何实现继承:

在java语言中,用extends(扩展)关键字来表示一个类继承了另一个类。

 

什么是方法的重写:

如果在子类中定义的一个方法,其名称、返回类型及参数列表正好与父类中某个方法的名称、返回类型及参数列表相匹配,那么可以说,子类的方法重写了父类的方法。

什么是方法的重载:

方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型

override(重写)

1、方法名、参数、返回值相同。

2、子类方法不能缩小父类方法的访问权限。

3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。

4、存在于父类和子类之间。

5、方法被定义为final不能被重写。

 

overload(重载)

1、参数类型、个数、顺序至少有一个不相同。

2、不能重载只有返回值不同的方法名。

3、存在于父类和子类、同类中。

public class People{
    private String name;
    private int age;


    public People(String name,int age){
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "People{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
构造函数:

构造函数是在对象实例化时自动被系统调用,该函数名必须是独一无二的,是将类名作为函数名。

构造函数不需要程序员去定义返回值,他是系统自动决定的,void也不行。

多态:

什么是多态?不同的对象,接收的相同的消息,产生的响应不同

多态的体现:重写和重载等。

多态的前提

    必须是类与类之间有关系。要么继承,要么实现。

    通常还有一个前提:存在覆盖。

多态的好处:

1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。

2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。

3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。

4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。

5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要

下面例子用到了继承和多态:

public class Work{

    public void rest(){
        System.out.println("劳动者坐在凳子上休息");
    }
}
public class PowerWorker extends Work{

    @Override
    public void rest() {
        System.out.println("体力劳动者休息的方式是躺在床上睡觉");
    }
}
public class MentalWorker extends Work{

    @Override
    public void rest() {
        System.out.println("脑力劳动者休息的方式是运动");
    }
}
public class WorkTest{
    public static void main(String[] args) {
        Work w1 = new Work();
        w1.rest();
        Work w2 = new PowerWorker();
        w2.rest();
        Work w3 = new MentalWorker();
        w3.rest();
    }


    public void fun(Work work){

    }

封装:

封装:是将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

也可以理解为:存在一个边界,边界之内的细节隐藏起来,只留下对外的借口(如:笔记本,手机,饮水机)

封装的好处:

①   只能通过规定方法访问数据,安全、易用、简单、易维护。

②   隐藏类的实现细节

③   方便加入控制语句

④   方便修改实现经过封装的属性,不能直接访问,要通过公共属性get/set方法访问。



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值