JAVA基础01-面向对象_kawasakiyyy的博客-程序员秘密

技术标签: 抽象类  java  多态  

1.什么是面向对象?

1.1面向对象的定义

面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成对象。

1.2面向对象的特性

1.2.1封装

1.隐藏实现细节,提供公共的访问方法;
2.提高了代码的复用性;
3.提高安全性。

1.2.2继承

  1. 它可以使用现有类的所有功能;
  2. 并在无需重新编写原有类的情况下对功能进行扩展。

1.2.3多态

1.2.3.1多态的特点

  1. 可以写出通用代码,不关心具体的子类类型,会把子类当做父类来看,屏蔽了子类间的不同
  2. 可以做出统一的调用标准,标准就是父类

1.2.3.1多态的使用

  1. 成员变量:使用的是父类的
  2. 成员方法:如果存在重写现象所以使用的就是子类的
  3. 静态成员:谁调用的就返回谁的

1.3面向对象的优缺点

  • 优点:
    1.易维护、易复用、易扩展;
    2.由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
  • 缺点:
    性能比面向过程低。

1.4 对象加载的过程

在这里插入图片描述

1.5 Java程序初始化顺序

  1. 父类的静态变量
  2. 父类的静态代码块
  3. 子类的静态变量
  4. 子类的静态代码块
  5. 父类的非静态变量
  6. 父类的非静态代码块
  7. 父类的构造方法
  8. 子类的非静态变量
  9. 子类的非静态代码块
  10. 子类的构造方法

2.重载与重写

2.1重写

1.发生在父子类中,方法名相同,参数列表相同,方法体不同;
2.遵循"运行期绑定",根据对象的类型来调用方法。

2.2重载

1.发生在一个类中,方法名相同,参数列表不同,方法体不同;
2.遵循"编译期绑定",根据参数的类型来绑定方法。

3.JVM内存

3.1方法区

加载的类文件

3.2栈

方法中的局部变量

3.3堆

新建的对象
对象中包含对象的成员变量

4.final

用来修饰常量、方法、类

  • 常量:
    值不可变
  • 修饰方法:
    子类中,不能重写
  • 修饰类:
    不能继承

5.static

静态属于类

5.1静态变量

5.1.1静态变量的特点

  • 属于类,存储在方法区中,只有一份
  • 常常通过类名.来访问

5.1.2静态变量与实例变量的区别

  • 语法定义:静态变量前要加 static 关键字,而实例变量(成员变量)前则不加。
  • 程序运行时:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量;静态变量属于类,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,只分配一次,静态变量就可以被使用了。
  • 调用:静态变量可通过类名.来访问;实例变量只能通过对象.l来访问

5.1.3静态变量的应用

所有对象所共享的数据(图片、音频、视频等)

5.2静态方法

5.2.1静态方法的特点

  • 属于类,存储在方法区中,只有一份
  • 常常通过类名.来访问
  • 静态方法中没有隐式this的传递
  • 静态方法中不能直接访问实例成员

5.2.2静态方法的应用

方法的操作仅与参数相关而与对象无关

5.3静态代码块

5.3.1静态代码块的特点

  • 属于类,在类被加载时自动执行,只执行一次

5.3.2静态代码块的应用

加载/初始化静态资源(图片、音频、视频等)

5.3.3静态代码块、构造代码块、局部代码块的区别

  1. 代码块就是一段被花括号包起来的代码.位置不同,作用和用法都不同
  2. 构造代码块在成员位置,用来提取所有构造方法的共性,触发的时间节点是当创建对象时
  3. 局部代码块在局部位置,用来控制变量的作用范围,触发的时间节点是方法调用时
  4. 静态代码块在成员位置,用来第一时间加载资源,并且只加载一次的资源,触发的时间节点是当类被第一次加载时
  5. 静态代码块:static{}
  6. 执行顺序:静态代码块 > 构造代码块 > 构造方法 > 局部代码块

6.接口与抽象类

6.1接口

由于Java中不允许多重继承,所以如果要实现多个类的功能,可以通过实现多个接口来实现。

6.1.1接口的特点

  1. 接口中都是抽象方法
  2. 通过interface关键字创建接口
  3. 通过implements让子类来实现,接口不能被实例化
  4. 接口突破了java的单继承的局限性
  5. 接口和类之间可以多实现,接口和接口之间可以多继承
    JDK8更新后接口中可以有default修饰的方法

6.1.2接口的用法

  1. 构造方法:接口里没有构造方法
  2. 成员变量:接口里没有变量,都是常量.会自动为变量 拼接public static final
  3. 成员方法:接口里都是抽象方法,而且可以简写.会为简写方法自动拼接public abstract

6.1.2接口的作用

  1. 接口是对外暴露的规则,是一套开发规范
  2. 接口提高了程序的功能扩展,降低了耦合性

6.2抽象类

如果一个方法没有方法体,这个方法就是一个抽象方法.如果一个类里,包含了抽象方法,这个类就是一个抽象类

6.2.1抽象类的特点

  1. 由abstract修饰
  2. 抽象类不能被实例化
  3. 抽象类是需要被继承的
  4. 抽象类中可以没有抽象方法

6.2.2抽象类的作用

  1. 代码复用:封装派生类共有的属性和行为
  2. 向上造型:为所有派生类提供统一的类型

6.3 接口和抽象类的异同点

6.3.1 接口和抽象类的相同点

  1. 两者都是抽象类,都不能实例化。
  2. interface实现类及abstrct class的子类都必须要实现已经声明的抽象方法。

6.3.1 接口和抽象类的不同点

  1. interface需要实现,要用implements,而abstract class需要继承,要用extends。
  2. 一个类可以实现多个interface,但一个类只能继承一个abstract class。
  3. interface强调特定功能的实现,而abstract class强调所属关系。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kawasakiyyy/article/details/108757898

智能推荐

Linux安全运维进阶:SSH常见配置_ssh -1246_寰宇001的博客-程序员秘密

一、了解SSH1.随便说说SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AI

isEmpty和isNull()区别及应用_uniapp isempty函数_不说废话斯基的博客-程序员秘密

isEmpty和isNull()区别null字符串ObjectUtil.isNull(): //结果为trueObjectUtil.isEmpty(); //结果为true空串ObjectUtil.isNull(""); //结果为falseObjectUtil.isEmpty(""); //结果为truePostman 中ket-value值,只填key不填value是属于空串。...

TimingDesigner使用——简介_timing designer_五学小子的博客-程序员秘密

简介 概述 本手册是对TimingDesigner Version 9.25 Quick Start Training Guide 的补充,并且使用TimingDesigner User’s Guide 作为参考教程。通过本次培训,用户将能更好的使用TimingDesigner。本教程包含几个实验,每个实验有一些关于工具使用的详细描述。这些实验讲授使用TD创建一个时序图,也讲了超出教...

Expecting a string, date or number here, Expression x is instead a freemarker.ext.beans.BooleanModel_expecting a string, boolean, date or number here, _梦百川的博客-程序员秘密

此异常的原因是freemarker不支持boolean类型。解决办法有三个:1、页面将属性转换为字符串:${entity.property?string("true", "false")},例如${user.active?string("true", "false")},后续判断时要注意是判断=="true"2、将对象的属性的类型改成其它类型,比如数字0、1,字符串等3、将对象的属性的

WPF 程序集资源_weixin_30359021的博客-程序员秘密

程序集资源,是指嵌入程序内部的二进制资源,如文本、图片、视频、声音和松散文件(Loose file)等等,对于这些资源项我们可以将其存储为松散文件或者编译进程序集中。这与传统的.NET程序其实是相通的。1、将资源放入程序集中将资源添加到应用程序中,非常简单,在当前程序目录下,建立一个文件夹,如下图所示:取名任意,我们叫Assets,在Assets添加几个图片1.png,2.png,...

windows Telnet问题_linyous的博客-程序员秘密

1、‘telnet’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。是因为系统默认没有打开,要我们手动打开1)、打开控制面板2)、点击程序3)、点击启动或关闭windows功能4)、勾选5)、安装即可2、Telnet连接到主机后输入命令,只有一个小短横,没有字母显示如 输入命令 telnet 127.0.0.1 6666这时只需要按 "ctrl+ ] " 注意注意 这里是 [ ] 不是 J| j解决问题...

随便推点

Codeup——577 | 问题 A: 输出梯形_codeup577_起风了的博客-程序员秘密

题目描述输入一个高度h,输出一个高为h,上底边为h的梯形。输入一个整数h(1<=h<=1000)。输出h所对应的梯形。样例输入5样例输出 ***** ******* ********* ************************思路:上底为h,高为h,则下底为 (h-1)*2+h,再根据规律把空格和 *求出即可。需要注意的是末尾换行,而且这里要用while……EOF循环,否则你会卡在答案错误50,Codeup上

STM32F767ZI NUCLEO144 基于CubeIDE快速开发入门指南_nucleof767zi 用户手册_小麦大叔的博客-程序员秘密

刚入手的NUCLEO-F767ZI;整合官网资源,理清思路,便于快速进行快发;

GRUB使用说明_weixin_33947521的博客-程序员秘密

从Red Hat Linux 7.2起,GRUB(GRand Unified Bootloader)取代LILO成为了默认的启动装载程序。相信LILO对于大家来说都是很熟悉的。这次Red Hat Linux用GRUB代替LILO,可见GRUB大有过人之处。不过,相对于LILO来说,大家对GRUB还是要陌生一些。本文将对GRUB的基本情况、术语、接口、命令以及配置文件做个介绍,希望对大家有所帮助。...

Xcode12 storyboard添加控件_xcode添加控件_笑乔的博客-程序员秘密

Xcode12 storyboard添加控件1.Xcode11添加控件的位置(图片来自网络,侵删)2.新版本Xcode12略有些变动,可能是本人实在是菜,愣是找不到原来的那个图标,后来才发现图标换成了这样就能添加控件啦,问题解决...

简述TCP/IP四层体系结构及每层作用_sukhoi27smk的博客-程序员秘密

应该说是Internet四层体系结构 1.数据链路层 2.网络层 3.传输层 4.应用层 ,其中IP是在第二层网络层中,TCP是在第3层传输层中,Internet体系结构最重要的是TCP/IP协议,是实现互联网络连接性和互操作性的关键,它把许多台的Internet上的各种网络连接起来。Internet的其他网络协议都要用到TCP/IP协议提供的功能,因而称我们习惯称整Internet协议族

十四周项目4_WangPeng233的博客-程序员秘密

/** Copyright (c) 2016 烟台大学计算机学院* All rights reserved.* 文件名称: Cpp1.cpp* 作者: 王鹏* 完成日期: 2016年12月16日* * 问题描述:设计一个算法,输出在二叉排序中查找时查找某个关键字经过的路径* 输入描述: 无* 输出描述: 实验数据*/#include #inc

推荐文章

热门文章

相关标签