Java面向对象的特征: 抽象、封装、继承、多态.

抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面:数据抽象和过程抽象.

封装:封装就是对属性和方法的载体类,只能通过其提供的接口(方法)来访问,而把实现细节隐藏起来.也就是说,具体实现对程序员来说是透明的,封装的好处在于对类内部的改变,不会影响到其他代码.

封装的做法:

1.私有属性(private修饰符修饰属性)。

2.提供public的读(getXX)写(setXX)方法。

3.在构造中调用方法.所有的非常量属性基本都需要封装.

封装的好处:

1.隐藏类的实现细节

2.对所有用户提供统一的接口

3.增强执行效果.

4.易于维护和扩展

继承:继承是一种关系,逻辑上满足子类is a 父类的关系才使用继承.

子类继承父类的属性和非私有方法.不能继承父类的构造,继承关键字extends,类单继承,接口多继承.

在构造子类对象时,依次调用父类的构造(子类默认调用父类的无参构造.可以使用super(参数列表)来调用指定的父类的含参构造)到Object为止.再调用子类自身的.

子类调用父类的构造时,父类的构造只能调用一个且必须写在子类构造的第一句.

【笔试题】: 类加载时的顺序问题:说出下面程序的执行结果

public class Test { public static void main(String[] args) { new B(); System.out.println(“--------”); new B(); }}class A{ //静态代码块 static{ System.out.println(“static code block in father”); } //代码块 { System.out.println(“code block in father”); } //构造 public A(){ System.out.println(“construction of father”); }}class B extends A{ //静态代码块 static{ System.out.println(“static code block in son”); } //代码块 { System.out.println(“code block in son”); } //构造 public B(){ System.out.println(“construction of son”); }}

程序执行结构

static code block in fatherstatic code block in soncode block in fatherconstruction of fathercode block in sonconstruction of son--------code block in fatherconstruction of fathercode block in sonconstruction of son

多态:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

多态的类型

1.基本类型的多态(本质上是基本类型之间的自动类型转换)

Java语言中将8种数据类型都分别封装了一个类,这些类中封装了各基本数据类型的属性和基本运算.

基本类型自动转换为对应的封装类的操作叫做自动装箱操作,反之叫自动拆箱操作,自动装箱操作有一个自动装箱池(范围为-128~127).只要自动装箱的数在自动装箱池范围内,则直接去池中找数据.

public class TestAutoPool { public static void main(String[] args) { Integer num1 = 127; Integer num2 = 127; System.out.println(num1num2);//true Integer num3 = 128; Integer num4 = 128; System.out.println(num3num4);//false }}

Charater在5.0没有该自动装箱池,在6.0有自动装箱池.

byte、short、int、long有自己的自动装箱池,其他基本类型都没有该自动装箱池.

自动装箱不会出现错误,自动解箱在下面情况下会出错

Integer num = null;int i = num;//null不能自动解箱

【笔试题】:说出下面程序的执行结果

public class Test { public static void main(String[] args) { short a = 128; byte b = (byte)a; System.out.println(“a=” + a + “,b=” + b); }}

程序运行结果:

a=128,b=-128

2.方法的多态(方法的重载、重写)

a)覆盖

父类继承过来的方法对子类不合适时子类可以改变该方法的实现,这种操作叫做方法的重写/覆盖(继承是重写的前提条件)

重写的要求:

<1>.方法名、参数列表和返回类型必须相同(5.0以后允许返回子类类型).

<2>.访问权限可以改但是不允许更小.(即子类的访问权限要么大于父类的要么相同,不允许小于父类的访问权限)

<3>.抛出的异常不能更大.

b)重载

方法的重载要求方法名必须相同,参数必须不同(参数个数不同、类型不同、顺序不同<(int,String)和(String,int)是不一样的>).返回值类型可以相同可以不相同.在此我向大家推荐一个架构学习交流圈。交流学习指导伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

3.类或者接口的多态(父类的引用指向子类的对象):Person p = new Student();

父类的引用指向子类的对象就发生了多态.后果:

<1>.只能使用父类中方定义的属性和方法

<2>.子类中定义的不能直接使用

<3>.子类复写了父类的方法,此时调用情况根据方法是否static而不同 [static(调用父类),非static(调用子类)].

<4>.如果想使用子类中定义的方法,可以强制类型转换(判断是否可以转换,用instanceof运算符来判断对象的类型)

【笔试题】:说出下面程序的执行结果

class A { int a = 1; static int b = 20; int c = 3; double d = 2.0; void show() { System.out.println(“Class A: a=” + a + “\td=” + d + “\tc=” + c + “\tb=” + b); } void common(){ System.out.println(“Class A: method common()”); } static void execute(){ System.out.println(“Class A: method excute()”); }}class B extends A { float a = 3.0f; static int b = 30; int c = 5; String d = “Java program.”; void show() { super.show(); System.out.println(“Class B: a=” + a + “\td=” + d + “\tc=” + c + “\tb=” +b); } void common(){ System.out.println(“Class B: method common()”); } static void execute(){ System.out.println(“Class B: method execute()”); } public static void main(String[] args) { A a = new B(); a.show(); System.out.println(“----------------------”); a.common(); System.out.println(“----------------------”); a.execute(); }}

程序运行结果

Class A: a=1 d=2.0 c=3 b=20Class B: a=3.0 d=Java program. c=5 b=30----------------------Class B: method common()----------------------Class A: method excute()

4.传参时的多态(基本类型的多态与类类型的多态混合使用)

面试求职中你需要了解的Java面向对象相关推荐

  1. 面试求职中遇到的那些问题

    面试中的那些"送命题" 你中招了吗? 微博:@恺思ZKN 丰经允许勿二改二传 客素引 口L.最简单也是最雅的"自背f招 己,内什么想开们公司工作? 口彐.施爪是字囗专业的 ...

  2. 面试求职中需要了解的Java多线程知识

    Java中多线程的实现方式 在java的历史版本中,有两种创建多线程程序的方法 1) 通过创建Thread类的子类来实现(Thread类提供了主线程调用其它线程并行运行的机制) 主要步骤: 自定义类继 ...

  3. java后端简历项目经历_为了面试字节跳动后端开发岗(Java)鬼知道我经历了什么.....

    字节跳动的招聘十分火热,基本上全年都是铺天盖地的宇宙条的招聘信息.但是其实录取率并不高. 无论是找后端方向还是其它方向,我相信整个面试的过程和时间节点都能对你有一定的帮助.字节跳动的面试流程基本上是我 ...

  4. 61条Java面向对象设计的经验原则

    1)所有数据都应该隐藏在所在的类的内部.      (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者.      (3)尽量减少类的协议中的消息.      (4)实现所有类都理解的最基本 ...

  5. [转载] JAVA面向对象之代码块 继承 方法的重写 super关键字与重写toString()方法介绍

    参考链接: 可以重写Java中的私有方法吗 JAVA面向对象之代码块与继承 代码块分类 局部代码块 作用:限制变量生命周期 书写位置:在方法中 构造代码块 开发中很少使用 书写位置:类中  方法外 调 ...

  6. java面向对象程序设计 论文_基于JAVA面向对象程序设计

    内容介绍 原文档由会员 xiaowei 发布 基于JAVA面向对象程序设计 ------------科学养兔项目分析 2.3万字 31页 摘要 本文报道了对面向对象程序设计思想的基本阐述,就科学养兔项 ...

  7. java求职面试_Java面试求职

    "Java"作为所有编程语言中最热门技术,可以说它无处不在,目前全球有着数十亿的设备正在运行着java,很多服务器程序都是用java编写,用以处理每天超过数以千万的数据. 无论是手 ...

  8. 面试中的着装与举止--Java面试

    许多人面对生平头一遭的求职与面试难免会心慌意乱.  如果这时镇静心态,注意仪态,穿着得体,面试时就能脱颖而出. 一.裁剪合宜.简单大方的套装,比两件式上下身搭配或洋装更能建立权西感与专业感,而女士下身 ...

  9. Interview:Java岗位面试—面试求职攻略之一个JAVA程序员面试心得(非常值得收藏)

    Interview:Java岗位面试-面试求职攻略之一个JAVA程序员面试心得(非常值得收藏) 导读 据网上资料显示:2018年互联网行业是寒冬,其他行业日子也不好过.各个互联网大厂纷纷缩招减员,严格 ...

最新文章

  1. 『高级篇』docker容器来说什么是微服务(三)
  2. 从Docker 到Jenkins 到Ansible的部署经验
  3. mac写python3_跟我读python3文档:004_mac与python3配置
  4. java maven centos7 yum安装
  5. PAT A1063——set的常见用法详解
  6. hdu 1880 魔咒词典
  7. Asp.Net.Core WebApi 版本控制
  8. C#多线程编程系列(四)- 使用线程池
  9. Spring学习之旅(二):Bean的高级装配之解决装配歧义性
  10. 【git】Git Submodule管理项目子模块
  11. Teradata 金融数据模型FS-LDM
  12. [vb]利用WScript.Shell对象隐藏cmd命令行运行
  13. Jquery页面跳转
  14. 用Atlas来实现一个基于AJAX的无刷新Chatroom
  15. c#反编译生成DLL过程
  16. 学会提问-批判性思维指南运用
  17. 内存spd规范_CL14真香,聊聊内存条时序到底是什么?
  18. nios自学笔记四:将sof和elf合并为JIC文件
  19. Apple M1(Mac Arm64) 安装开发工具
  20. excel怎么算复购率(EXCEL怎么算平均分)

热门文章

  1. SLAM - 01 - 分类
  2. docker harbor 新建私有仓库
  3. android 字典转json,在Swift中将字典转换为JSON
  4. sql 逐行更新_sql优化面试题
  5. 【script】python使用cx_Oracle模块访问Oracle
  6. 三星s4 android8,三星全面支持安卓8.0系统,14款手机更新让人眼红
  7. 南华大学计算机学院吴取劲,一种基于图深度优先搜索的基本路径集自动生成优化算法-南华大学学报.PDF...
  8. c语言sleep函数上限多久解除,关于sleep函数的问题,
  9. python-深浅拷贝
  10. CentOS7系列--5.2CentOS7中配置和管理Docker