java 面向对象思想 封装多态继承

面向过程与面向对象

编程分为面向对象编程和面向对象编程,汇编,C语言是面向过程写代码,C++/Java是面向对象

其实面向过程和面向对象在本质都是一样写代码,然后将代码翻译成机器码让中央处理器去执行,但是在实现功能和整体设计上,相对于人来说,特别是Java,面向对象在设计上更抽象,是写代码在设计上的升华。

Java里说,万物皆对象,如果说java的面向对象设计思想是java火起来的原因,那么Spring设计思想让Java的光彩放大。

Java面向对象特性

万物皆对象

在Java中,除了基础数据类型,char int float 与数学计算相关的基本类型,其他所有的任何都是对象,他们会有对应的类名,字节码

封装

java实际编写功能时,所写代码皆对象,因此封装无处不在,你可以隐藏对象的属性(private), 通过封装方法对类里面的内容操作。

封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。

1将类的某些信息隐藏在类的内部,不允许外部程序进行直接的访问调用。

2通过该类提供的方法来实现对隐藏信息的操作和访问。

3隐藏对象的信息。

4留出访问的对外接口。

封装的好处

  • 对成员变量实行更准确的控制。
  • 封装可以隐藏内部程序实现的细节。
  • 良好的封装能够减少代码之间的耦合度。
  • 外部成员无法修改已封装好的程序代码。
  • 方便数据检查,有利于保护对象信息的完整性,同时也提高程序的安全性。
  • 便于修改,体高代码的可维护性。

简单一句话,高内聚,低耦合

继承

继承就是父子之间一种关系特性,如A类继承B类,那么A是子类,B是父类,通俗的理解,A(子类)继承了B(父类)的一些公共属性和方法。

简单来说,继承用在一些共性上,是设计上的抽象一种表现。

四肢动物是抽象的,但是你知道他有四肢,那么你可以定义一个属性,说明他是四肢动物,猫和狗可以继承它,鸡是两条腿不能继承它,这是从面向对象设计角度去描述继承的使用

多态

多态是同一个行为具有多个不同表现形式或形态的能力。

多态的特点

1,消除类型之间的耦合关系,实现低耦合。

2,灵活性。

3,可扩充性。

4,可替换性。

你可以定义一种抽象类,并且创建抽象类的具体实现,之后所有子类对象创建可以用父类去接收,在执行方法时,父类引用指向子类对象,方法也是子类的方法,都是父类,指向不通子类,执行方法结果不一样,就是多态。

封装多态继承 代码体现


/** -定义抽象类,动物
* Animal-定义一个动物
* @author Narule
*
*/
public abstract class Animal { // 动物腿的数量
protected int legNum; // 动物吃的食物
protected String food; // 动物名字
protected String name; // 是否是四肢动物 方法定义
boolean isFourLegAnimal() {
return legNum == 4;
} // 吃食物,抽象方法定义,具体动物需要实现次方法
public String eatFood() {
System.out.println(this.name);
System.out.println("----------");
System.out.println(this.name + " eat food is " + this.food);
System.out.println("----------");
} // 测试 java封装、继承、多态特性 简单理解表达
public static void main(String[] args) { // 创建三个动物对象 鸡 狗 猫
// 封装体现,创建对象不能去修改他的属性
Animal animal1 = new Chicken();
Animal animal2 = new Dog();
Animal animal3 = new Cat(); // 判断是否是四条腿的动物 继承体现
System.out.println(animal1.isFourLegAnimal());
System.out.println(animal2.isFourLegAnimal());
System.out.println(animal3.isFourLegAnimal()); // 吃东西 多态体现,同一个行为j具有多个不通表现形式
animal1.eatFood();
animal2.eatFood();
animal3.eatFood(); }
} // 鸡猫狗都属于动物,都有名字,这里可以用到继承,并且他们都吃东西,吃东西的方法也能继承 /* -定义鸡
* Animal-鸡
*/
class Chicken extends Animal{ /* - 一种封装手法,你可以创建一只鸡对象
* - 但是因为封装了,你没办法修改鸡的腿的条数,这一封装好处的一个具体表现
*/ public Chicken() {
this.legNum = 2;
this.food = "insect 虫子";
this.name = "Chicken";
} } /* -定义狗
* Animal-狗
*/
class Dog extends Animal{ public Dog() {
this.legNum = 4;
this.food = "bone 骨头";
this.name = "Dog";
} } /* -定义猫
* Animal-猫
*/
class Cat extends Animal{ public Cat() {
this.legNum = 4;
this.food = "fish 鱼";
this.name = "Cat";
} // 因为java继承父类的方法,你也可以重写父类方法
@Override
public String eatFood() {
System.out.println("override method define cat how to eat food");
return super.eatFood();
} }

测试 封装多态继承特性

public class JavaFeature {

	// java 封装 继承 多态  简单理解表达
public static void main(String[] args) { // 创建三个动物对象 鸡 狗 猫
// 封装体现,创建对象不能去修改他的属性
Animal animal1 = new Chicken();
Animal animal2 = new Dog();
Animal animal3 = new Cat(); // 判断是否是四条腿的动物 继承体现
System.out.println(animal1.isFourLegAnimal());
System.out.println(animal2.isFourLegAnimal());
System.out.println(animal3.isFourLegAnimal()); // 吃东西 多态体现,同一个行为j具有多个不通表现形式
animal1.eatFood();
animal2.eatFood();
animal3.eatFood(); }
}

控制台输出

false
true
true
Chicken
----------
Chicken eat food is insect 虫子
----------
Dog
----------
Dog eat food is bone 骨头
----------
override method define cat how to eat food
Cat
----------
Cat eat food is fish 鱼
----------

Spring的淋漓精致

很多时候,如果只是功能需求,我们甚至可以只写一个接口,定义接口抽象方法的输入和输出,没有具体实现,然后在开发的时候对应具体不同场景不同开发人员,可以容许不同的设计和实现。这样软件设计开发中很好的提高开发效率,并且以维护,易扩展,低耦合,安全。

多态,继承,封装高级使用,设计模式,Spring框架很多具体体现,(依赖抽象不依赖具体,控制反转,代理),Spring是很值得学习的框架

java 封装多态继承的更多相关文章

  1. JAVA封装、继承、多态

    封装 1.概念: 将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: a.只能通过规定的方法访问数据 b.隐藏类的实例细节,方便修改和实 ...

  2. python 面向对象三大特性(封装 多态 继承)

    今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...

  3. JAVA封装、继承

    封装 1.概念: 将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问. 2.好处: a.只能通过规定的方法访问数据 b.隐藏类的实例细节,方便修改和实 ...

  4. 20140729 while((*pa++=*pb++)!='\0') 合并数组代码 C++类型转换关键字 封装 多态 继承

    1.关于while((*pa++=*pb++)!='\0')和while((*pa=*pb)!='\0') {pa++;pb++;}的不同 #include<stdio.h> void m ...

  5. 深入理解Java封装、继承、多态

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10830957.html 一:封装 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法 ...

  6. java 封装,继承,多态基础

    什么是封装? 1,对象数据和在.操作该对象的指令都是对象自身的一部分,能够实现尽可能对外部隐藏数据. 2,实际项目开发中,使用封装最多的就是实体类. 什么是继承? 1,继承是面向对象程序设计能提高效率 ...

  7. Java 封装、继承、多态

    Java中使用 extends 关键字 进行父类继承 在初始化子类时,子类会自动执行父类的构造方法, 如果子类的构造方法中没有显示调用父类的构造方法, 则系统会默认调用父类无参的构造方法 super( ...

  8. python学习day19 面向对象(一)封装/多态/继承

    面向对象 封装思想:将同一类的函数函数封装到同一个py文件中,方便调用 面向对象也有封装的作用,将同一类的函数封装到一个类中 多态(鸭子模型):多种类型/多种形态 #,什么事鸭子模型 对于一个函数,p ...

  9. Java封装、继承整理

    封装 3.1封装概念: 提高代码复用性 隐藏实现细节,对外访问提供公共接口 提高安全型 3.2封装举例 机箱就是隐藏实现细节,提供了公共的访问接口 3.3私有private 一般对成员属性的访问动作: ...

随机推荐

  1. 科普,想成为厉害的 Java 后端程序员,你需要懂这些

    站在运筹帷幄的角度来看,一名厉害的 Java 后端程序员都需要懂得哪些知识呢?我想,这也是很多读者迫切想知道的一个问题,因为如果不站在一个宏观的角度的话,所有学过的知识点都是零散的,就感觉像一只迷路的 ...

  2. 【大数据】MapReduce开发小实战

    Before:前提:hadoop集群应部署完毕. 一.实战科目:做一个Map Reduce分布式开发,开发内容为统计文件中的单词出现次数. 二.战前准备 1.本人在本地创建了一个用于执行MR的的文件, ...

  3. 【转】Locust-工具核心原理分析

    Locust工具在市场上不如Loadrunner / JMeter流行,使用的范围也没有那么广,但不可否认其是一款很不错的工具.我个人觉得Locust使用不是那么广泛,主要是因为一下方式: Locus ...

  4. Java基础一篇过(八)常见异常速查

    一.引言 开发过程中可能会遇到各种各样的异常,这里还是汇总一些比较典型的异常,有些比较直观的异常如空指针这种就不写了,此文可作为异常速查用. 二.异常大军正在来袭~ IllegalArgumentEx ...

  5. dubbo学习(七)dubbo项目搭建--生产者(服务提供者)

    PS:  项目架子以及工程间的maven依赖配置暂时省略,后续看情况可能会单独写一篇文章捋捋框架结构,先马克~ 配置和启动 1.pom文件引入dubbo和zookeeper的操作客户端 <!-- ...

  6. Typecho反序列化漏洞

    Typecho Typecho是一款快速建博客的程序,外观简洁,应用广泛.这次的漏洞通过install.php安装程序页面的反序列化函数,造成了命令执行,Typecho 1.1(15.5.12)之前的 ...

  7. 帮你理清React的生命周期

    这是一个从印记中文 | react官方文档提取总结的,算是帮自己理清并且强化记忆React的生命周期,以便以后编写组件的时候能够有更清晰的思路.本文如有纰漏,欢迎指正 整体上来讲,React生命周期分 ...

  8. django rest_framework serializer的ManyRelatedField 和 SlugRelatedField使用

    class BlogListSerializer(serializers.Serializer): id = serializers.IntegerField() user = BlogUserInf ...

  9. 手把手撸套框架-Victory框架1.0 详解

    目录 其实Victory框架1.0 在8月份就完成了,整个9月份都没有更新博客,主要还是因为松懈了. 所以,趁着国庆节的放假的时间把博客给更新一下,1.0总的来说算不得一个成熟的产品,但是拿来开发我们 ...

  10. sqli-labs第二关 详解

    学会了第一关,时隔多天来到了第二关,怎么说了没有看wp就给做出来了. 首先,我是自己先判断了下,这个是什么注入 ?id=1' 不行 ?id=1' or '1'='1--+ 也不行 然后又尝试了下 ?i ...