Java三大特征

Java三大特征Java面向对象的三大特征:封装、继承、多态封装和继承几乎都是为多态而准备的一、     封装首先,属性能够描述事物的特征,方法能够描述事物的动作。封装就是把同一类事物的共性(包括属性和方法)归到同一类中,方便使用。封装:封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数

大家好,又见面了,我是你们的朋友全栈君。

Java面向对象的三大特征:

封装、继承、多态

封装和继承几乎都是为多态而准备的

一、      封装

首先,属性能够描述事物的特征,方法能够描述事物的动作。封装就是把同一类事物的共性(包括属性和方法)归到同一类中,方便使用。

  1. 封装:封装也称信息隐藏,是指利用抽象数据类型把数据和基于数据的操作封装起来,使其成为一个不可分割的整体,数据隐藏在抽象数据内部,尽可能的隐藏数据细节,只保留一些接口使其与外界发生联系。也就是说用户无需知道内部的数据和方法的具体实现细节,只需根据留在外部的接口进行操作就行。
  2. 封装的好处:

1)        实现了专业的分工

2)        良好的封装能够减少耦合

3)        类内部的结构能够自有修改

4)        可以对成员进行更精确的控制

5)        隐藏信息,实现细节

  1. 封装的步骤

1)        修改属性的可见性来限制对属性的访问

2)        为每个属性创建一队赋值和取值方法,用于对这些属性的访问

3)        在赋值和取值方法中,加入对属性的存取限制

 

为了实现良好的封装,我们通常将类的成员变量声明为private,在通过public方法来对这个变量来访问。对一个变量的操作,一般有读取和赋值2个操作,,我们分别定义2个方法来实现这2个操作,一个是getXX(XX表示要访问的成员变量的名字)用来读取这个成员变量,另一个是setXX()用来对这个变量赋值。

 

下面我们来看下这个例子:

    public class Husband {

 

    /*

     * 对属性的封装一个人的姓名、性别、年龄、妻子都是这个人的私有属性

     */

    private String name;

    private String sex;

    private int age;

    private Wife wife;

 

    /*

     * setter()、getter()是该对象对外开发的接口

     */

    public String getName() {

        return name;

    }

 

    public void setName(String name) {

        this.name = name;

    }

 

    public String getSex() {

        return sex;

    }

 

    public void setSex(String sex) {

        this.sex = sex;

    }

 

    public int getAge() {

        return age;

    }

 

    public void setAge(int age) {

        this.age = age;

    }

 

    public void setWife(Wife wife) {

        this.wife = wife;

    }

}

二、      继承

  1. 1.         Java继承

Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,父类是子类的一般化,子类是父类的特化(具体化)

继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。若类B继承类A,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能(操作),我们称被继承的类A为基类、父类或超类,而称继承类B为A的派生类或子类。

继承避免了对一般类和特殊类之间共同特征进行的重复描述。同时,通过继承可以清晰地表达每一项共同特征所适应的概念范围——在一般类中定义的属性和操作适应于这个类本身以及它以下的每一层特殊类的全部对象。运用继承原则使得系统模型比较简练也比较清晰。

  1. 2.         Java继承的特征

1)        继承关系是传递的。若类C继承类B,类B继承类A(多继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。

2)        继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。

3)     继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。

  1. 3.         继承的实例

class Person1 {

       public String name = “xiaomiao”;

       public int age = 20;

}

 

class Student extends Person1 {

       void study() {

              System.out.println(“I can study!”);

       }

}

 

public class JiCheng {

       public static void main(String args[]) {

              Student stu = new Student();

              // stu.name = “zhangsan”;

              // stu.age = 20;

              System.out.println(“name=” + stu.name + “,,,” + “age=” + stu.age);

       }

}

三、      多态

  方法的重写、重载与动态连接构成多态性; 

  Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了更大的麻烦,为了规避风险,Java只允许单继承,派生类与基类间有IS-A的关系(即“猫”is a “动物”)。这样做虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制,所以,Java引入了多态性的概念以弥补这点的不足,此外,抽象类和接口也是解决单继承规定限制的重要手段。同时,多态也是面向对象编程的精髓所在。 

  要理解多态性,首先要知道什么是“向上转型”。 

  我定义了一个子类Cat,它继承了Animal类,那么后者就是前者的父类。我可以通过

  Cat c = new Cat();       例化一个Cat的对象,这个不难理解。

  但当我这样定义时: Animal a = new Cat();

  这代表什么意思呢?

  很简单,它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象。由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的。那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特,定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。所以, 

  父类引用只能调用父类中存在的方法和属性,不能调用子类的扩展部分;因为父类引用指向的是堆中子类对象继承的父类;(但是如果强制把超类转换成子类的话,就可以调用子类中新添加而超类没有的方法了。) 

  同时,父类中的一个方法只有在父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用; 

  对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156311.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dart jsonDecode与jsonEncode[通俗易懂]

    dart jsonDecode与jsonEncode[通俗易懂]jsDecode顾名思义是解析json,解析json到模型中,例如将字符串jsonpt解析到实体类payloadModel中:finalpayloadModel=PayLoadModel.fromJson(jsonDecode(pt)asMap<String,dynamic>);jsonEncode是把数据转为json

    2022年7月17日
    49
  • IOC

    IOC

    2022年1月12日
    56
  • webstorm快捷键大全

    webstorm快捷键大全  

    2022年6月23日
    22
  • jmeter性能测试方案

    jmeter性能测试方案性能测试方案性能测试概述性能测试是通过自动化的测试工具模拟多种正常 峰值以及异常负载条件来对系统的各项指标进行测试 测试前期准备 1 测试需求 1 1 需要将开发给定的需求 前端页面的智能问答接口性能 转为吞吐量和响应时间 1 2 根据测试目的 细化需求 2 测试准备 测试准备包括测试客户端机器准备 测试数据准备 测试脚本准备 3 测试执行 测试的执行中 需要监控测试客户端和服务器性能 监控服务器端应用情况 1 3 1 客户端的系统资源 cpu io memory 情况 1

    2025年6月6日
    5
  • Java的throws Exception

    Java的throws Exception转 https www cnblogs com feichengwula articles 3793261 html1 终极解释 throwsExcept 放在方法后边 是 throwsExcept 表示的是本方法不处理异常 交给被调用处处理 如果你不希望异常层层往上抛 你就要用 throwsExcept 而且被调用处必须处理 2 thrownewExce

    2025年8月19日
    5
  • Linux搭建eureka集群,基于dns搭建eureka集群[通俗易懂]

    Linux搭建eureka集群,基于dns搭建eureka集群[通俗易懂]eureka集群方案:1.通常我们部署的eureka节点多于两个,根据实际需求,只需要将相邻节点进行相互注册(eureka节点形成环状),就达到了高可用性集群,任何一个eureka节点挂掉不会受到影响。2.可能会有初学者和我一样,一开始的时候没有完全理解eureka集群的原理,直接把每个eureka节点的url写进配置文件,期望所有的eureka节点进行相互注册。实际上,节点间进行信息同步的时候,…

    2022年5月3日
    119

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号