Java面向对象编程篇2——面向对象三大特点

1、封装

1.1、封装的概念

通常情况下可以在测试类给成员变量赋值一些合法但不合理的数值,无 论是编译阶段还是运行阶段都不会报错或者给出提示,此时与现实生活不符

为了避免上述错误的发生,就需要对成员变量进行密封包装处理,来隐 藏成员变量的细节以及保证成员变量数值的合理性,该机制就叫做封装

1.2、封装实现流程

  • 私有化成员变量,使用private关键字修饰

  • 提供公有的get和set方法,并在方法体中进行合理值的判断

  • 在构造方法中调用set方法进行合理值的判断

2、继承

2.1、继承的概念

  • 当多个类之间有相同的特征和行为时,可以将相同的内容提取出来组成 一个公共类,让多个类吸收公共类中已有特征和行为而在多个类型只需 要编写自己独有特征和行为的机制,叫做继承。
  • 在Java语言中使用extends(扩展)关键字来表示继承关系。
  • 使用继承提高了代码的复用性,可维护性及扩展性,是多态的前提条件。
public class Worker extends Person{} - 表示Worker类继承自Person类
其中Person类叫做超类、父类、基类。
其中Worker类叫做派生类、子类、孩子类。

2.2、继承的特点

  • 子类不能继承父类的构造方法和私有方法,但私有成员变量可以被继承 只是不能直接访问
  • 无论使用何种方式构造子类的对象时都会自动调用父类的无参构造方法, 来初始化从父类中继承的成员变量,相当于在构造方法的第一行增加代 码super()的效果
  • 使用继承必须满足逻辑关系:子类 is a 父类,也就是不能滥用继承
  • Java语言中只支持单继承不支持多继承,也就是说一个子类只能有一个父 类,但一个父类可以有多个子类

3、多态

3.1、多态的概念

  • 多态主要指同一种事物表现出来的多种形态
  • 饮料:可乐、雪碧、红牛、脉动
  • 宠物:猫、狗、鸟、小强、鱼
  • 人:学生、教师、工人、保安
  • 图形:矩形、圆形、梯形、三角形

3.2、多态的格式

父类类型 引用变量名 = new 子类类型();

3.3、多态的特点

  • 当父类类型的引用指向子类类型的对象时,父类类型的引用可以直接调 用父类独有的方法
  • 当父类类型的引用指向子类类型的对象时,父类类型的引用不可以直接 调用子类独有的方法
  • 对于父子类都有的非静态方法来说,编译阶段调用父类版本,运行阶段 调用子类重写的版本(动态绑定)
  • 对于父子类都有的静态方法来说,编译和运行阶段都调用父类版本

3.4、多态的意义

多态的实际意义在于屏蔽不同子类的差异性实现通用的编程带来不同的效果

4、构造方法

.构造方法名与类名完全相同并且没有返回值类型

4.1、构造方法作用

使用new关键字创建对象时会自动调用构造方法实现成员变量初始化工作

4.2、构造方法格式

class 类名 {类名(形参列表) {构造方法体;}
}

4.3、构造方法注意事项

  • 当一个类中没有定义任何构造方法时,编译器会自动添加一个无参空构 造构造方法,叫做默认/缺省构造方法,如:Person(){}
  • 若类中出现了构造方法,则编译器不再提供任何形式的构造方法。

5、方法重载与方法覆盖重写

5.1、方法重载

与参数列表的数量、类型和顺序有关,与修饰符和返回值类型以及抛出异常类型无关

在一个类中为一种行为提供多种实现方式并提高可读性

public class Test3 {public int add(int a,int b){return a+b;}public int add(int a,int b,int c){return a+b+c;}
}

5.2、方法覆盖重写

父类方法无法满足子类的要求,子类通过方法重写满足需求

public class Test4 {public int add(int a,int b){return a+b;}
}
class Test5 extends Test4 {@Overridepublic int add(int a, int b) {return a-b;}
}

6、方法递归

6.1、递归的概念

方法自己调用自已

6.2、递归三要素

  • 一定有一种可以退出程序的情况;
  • 总是在尝试将一个问题化简到更小的规模
  • 父问题与子问题不能有重叠的部分

6.3、递归范例

public class Test6 {public static void main(String[] args) {System.out.println(add(100));}public static int add(int a){if (a!=1){return a+add(a-1);}else{return 1;}}
}

7、访问权限

访问权限 本类 本包的类 子类 非子类的外包类
public
protected
default
private
  • public: 所修饰的类、变量、方法,在内外包均具有访问权限;
  • protected: 这种权限是为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问
  • 包访问权限(default): 只对同包的类具有访问的权限,外包的所有类都不能访问;
  • private: 私有的权限,只对本类的方法可以使用;

8、static关键字

static是不允许用来修饰局部变量

8.1、static方法

static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

public class Test7 {public static void main(String[] args) {Test8.sleep();}
}
class Test8{public static void sleep(){System.out.println("sleep~");}
}

8.2、sattic变量

static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

static成员变量的初始化顺序按照定义的顺序进行初始化

8.3、static代码块

static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

private static Date startDate,endDate;
static{startDate = Date.valueOf("2000");endDate = Date.valueOf("2021");
}

9、final关键字

9.1、修饰类

当用final修饰一个类时,表明这个类不能被继承。

9.2、修饰方法

类的private方法会隐式地被指定为final方法

方法无法被覆盖重写

9.3、修饰变量

对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象,但其属性仍可以更改。

9.4、final注意事项

  • 当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再被赋值了。
  • static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变。

Java面向对象编程篇2——面向对象三大特点相关推荐

  1. Java面向对象编程篇1——类与对象

    Java面向对象编程篇1--类与对象 1.面向过程 1.1.概念 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了 1.2.优缺点 优点:性 ...

  2. Java面向对象编程篇6——注解与反射

    Java面向对象编程篇6--注解与反射 1.注解概述 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制 Java 语言中的类.方法.变量.参数和包等都可 ...

  3. Java面向对象编程篇5——枚举

    Java面向对象编程篇5--枚举 1.枚举的概念 在日常生活中这些事物的取值只有明确的几个固定值,此时描述这些事 物的所有值都可以一一列举出来,而这个列举出来的类型就叫做枚举类型 2.枚举的定义 使用 ...

  4. Java面向对象编程篇4——内部类

    Java面向对象编程篇4--内部类 1.内部类的概念 当一个类的定义出现在另外一个类的类体中时,那么这个类叫做内部类 (Inner),而这个内部类所在的类叫做外部类(Outer). 类中的内容:成员变 ...

  5. Java面向对象编程篇3——接口与抽象类

    Java面向对象编程篇3--接口与抽象类 1.接口(interface) 接口中可以含有变量和方法.但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是pub ...

  6. [.net 面向对象编程基础] (13) 面向对象三大特性——多态

    [.net 面向对象编程基础] (13) 面向对象三大特性--多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...

  7. java面向对象编程 漫画_Java面向对象编程(一)

    由于常常将Java和C++面向对象编程的原则搞乱,所以这次把相关要点分别总结一下,本文主要总结Java面向对象编程. 面向对象编程的三大特性是:继承性(inheritance), 多态性(polymo ...

  8. java面向对象编程思想_Java面向对象编程思想的理解

    1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...

  9. java如何抽象一辆车,java新职篇:面向对象之抽象

    面向对象编程的一个实质性的要素是抽象.人们通过抽象(abstraction)处理复杂性. 例如,人们不会把一辆汽车想象成由几万个互相独立的部分所组成的一套装置,而是把汽车想成一个具有自己独特行为的对象 ...

最新文章

  1. Cobbler-自动化部署神器
  2. wampsever的mysql密码_WampServer修改Mysql密码的步骤
  3. 基于jquery的ajax聊天室系统,基于jQuery的Ajax聊天室应用毕业设计(含外文翻译)...
  4. boost::promise相关的测试程序
  5. sklearn自学指南(part59)--神经网络模型(监督)
  6. 移动混合开发之android文件管理新建文件和删除文件
  7. [翻译] ZLHistogramAudioPlot
  8. wincc服务器系统,什么情况下用wincc服务器与客户端
  9. 原反补移码的概念应用以及异或的作用
  10. 宝马与intel合作 2021年推全自动无人驾驶车
  11. C++冒泡排序(初级版)
  12. android double值排序,android根据Double类型数据经纬度算出距离再根据距离实现排序功能...
  13. python爬虫做灰产_python爬虫
  14. GD32F130之DMA
  15. Python使用openpyxl插入excel批注,修改批注
  16. 谷歌浏览器下面的任务栏不见了
  17. 计算当前时间到午夜零点的时间差——Java(JDK1.8)
  18. 计算机为什么无法访问公司共享文件夹,win10系统共享文件夹无法访问的详细方案...
  19. Unity动态构建Mesh来绘制任意多边形(雷达图效果)
  20. Kerberos介绍(全)

热门文章

  1. c语言定义5个元素数组, 对数组进行从小到大排序,定义一个5行5列的二维数组,并动态赋值,将第3列的数组进行从小到大的排序...
  2. java 嵌套调用_Java嵌套类的使用
  3. android分开两个线程做事,android开发教程之handle实现多线程和异步处理
  4. sql server与oracle的分页,详解SQLServer和Oracle的分页查询
  5. hive分区用2个字段有何限制_[特性]Hive动态分区功能使用
  6. opencv入门_【OpenCV入门之十八】通过形态学操作提取水平与垂直线
  7. Java Date hashCode()方法与示例
  8. 额!Java中用户线程和守护线程区别这么大?
  9. UNDO Tablespace
  10. 五、QPushButton按钮和QLineEdit控件操作