• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

面向对象的特征是啥?

技术杂谈 勤劳的小蚂蚁 3个月前 (02-02) 70次浏览 已收录 0个评论 扫描二维码

封装

说面向对象的特征是封装,c语言是非面向对象语言,难道没有封装吗?只要是高级语言都有封装。因为面向过程把通过函数的封装,转化为了面向对象通过类来封装。 类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

继承

继承确实是面向对象中特有的。继承是指这样一种能力:它可以使用现有类的所有功能。
这里的继承,是广义上的继承,可以用两种方式来实现:
  1. Inheritance(继承)
  • 子类:继承创建的新类
  • 基类:被继承的类
继承

  1. Composition(组合)
把已有的功能赋能到新的类中.
组合

这两种方式什么时候用呢?我们之后再开帖子讲.以及《thinking in java》中为什么说多用组合,少用继承。
OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。
它的好处是什么呢?
  • 提高了代码的复用性。
  • 让类与类之间产生了关系。
    编程有时候像搭积木,不要用重复的积木,怎么样组织代码。

多态

在同一个方法中,由于参数不同而导致执行效果各异的现象就是多态。
  1. Java实现多态有三个必要条件:继承、重写、向上转型
  • 继承:在多态中必须存在有继承关系的子类和父类。
  • 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
  • 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。

override(重写)

方法名、参数、返回值相同。发生在不同的类之间。
尤其java中实际上有相应的关键字 @override 标记重写.
public class Human {
    public void write() throws Exception {
        //写字.
    }
}

public class Programmer extend Human {
    @override
    public void write() throws Exception {
        //程序员写不仅仅写字,还会写代码.
    }
}

overload(重载)

参数类型、个数、顺序至少有一个不相同。
public class Programmer {
    public void coding() throws Exception {

    }

    public void coding( String langType ) {

    }

    public String coding( String langType, String project ) {
        return “”;
    }
}
这里的知识大家都懂。我说一个大家不懂的好了。
public class Programmer {
    public void coding(List<String> langType) {
        ;
    }

    public void coding(List<Integer> langType) {
        ;
    }
}
你觉得上面这段代码可以编译过吗?答案是并不能,因为java中存在类型擦除。实际上List<String>List<Integer>是同一种类型List<T>
遇到这种情况我们一般在实现的时候怎么实现呢?很简单粗暴.
public class Programmer {
    public void codingString(List<String> langType) {
        ;
    }

    public void codingIntegers(List<Integer> langType) {
        ;
    }
}

丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:面向对象的特征是啥?
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00