全方位讲解Java的面向对象编程思想

什么是面向对象?
Object 对象,Oriendted 以…为导向的, Programming 程序设计

面向对象就是使用对象进行程序设计,简写成OOP。

SP和OOP对比

面向对象的三大原则
     封装  继承   多态

对象

对象是面向对象编程的核心部分,是实际存在的具体实体,具有明确定义的状态和行为;
对象其实就是“数据”和“函数”的封装体,其中:
数据表示自身的状态,也称作“属性”或“成员数据”;
函数表示自身的功能,也称作“方法”或“成员函数”。


人们为了更好地认识世界,将现实生活中的事物(对象)划分成类;
同一类中的事物总是具有一些共性;
类以共同的特性和行为定义实体;
类是具有相同属性和和行为的一组对象的集合。

属性
事物的特性在类中用变量表示;
每个对象的每个属性都拥有其特定的值;
属性名称由类的所有对象共享;
对象或实体拥有的特征在类中表示时称为属性

方法
事物的行为和动作在类中用函数表示;
每个对象都有相同的动作和行为;
对象执行的操作在类中表示为方法。

类和对象的区别
类是用来描述实体的“模板”或“原型”;
对象是实际的实体,每一个对象都是类的一个具体实例;
类用来定义对象所有的属性和方法,同一类的所有对象都拥有相同的特征和操作;
可以将类理解成生产产品的模具,而对象则是根据此模具生产的一个个产品。

类与结构

封装
将某些东西包装在一起,然后以新的完整形式呈现出来;
隐藏属性、方法或实现细节的处理方式称为封装;
封装其实就是有选择性地公开或隐藏某些信息,它解决了数据的安全性问题。

继承
继承就是重用现有的类来生成新类的一种特征;
通俗地讲就是从现有的类(即父类或基类)创建新类(子类或派生类)的过程;
现实生活中,继承可以达到财产重用的目的,而在Java中,继承可以使代码重用。

多态
多态是指同一函数在不同的类中有不同的实现;
多态的好处就是使类更灵活,更便于扩充。

这里还有一个不得不说的的 “抽象”
抽象
把相同的或相似的对象归为一类的这个过程就是抽象,所以,抽象就是分析问题的方法;
抽象的基本原则:
只关心主要问题,而不关心次要问题;
只关心主要矛盾,而不关心次要矛盾;
只关心相同的东西,而不关心不同的东西;
只关心问题是什么,能够完成什么,而不关心怎样去完成。
抽象的过程其实就是面向对象编程的核心思想。

在Java中定义类

在Java中创建对象

创建对象的语法
和数组相似,对象也是引用数据类型,只能使用new运算符从堆中分配内存;
创建对象的一般语法:
  类名 引用名 = new 类名();
使用已经定义好的类,创建该类对象的过程称为“实例化”。

成员运算符  “ . ”
只有先实例化类的对象,才可以访问到类中的成员(属性和方法);
使用成员运算符(.)来访问成员属性或成员方法;
一般语法是:
  对象名.成员名
如:

std.age = 18;  //为成员属性赋值
  std.dining(); //调用成员方法

访问权限:public和private
C语言中结构体的成员可以从任何地方进行访问,这将给数据的安全留下极大的隐患;
为了避免从类外部直接访问类成员而造成的数据损坏,Java对类成员的访问制定了约束;
关键字public和private是访问修饰符,用来说明某个成员是否可以从类外部进行访问;
public修饰的成员可以在任何地方进行访问,不受任何约束;
private修饰的成员只能够被本类中的其它成员访问,而不能从类的外部进行访问。

无法从类的外部访问私有成员;
其它类的私有成员对于当前类也是隐藏的。

访问权限示例

class Student {
 private String name;  //姓名,私有的,不可以从类外部直接访问
 private int age;    //年龄,私有的,不可以从类外部直接访问
 private float weight; //体重,私有的,不可以从类外部直接访问 

 //吃饭的方法,公有的,可以从任何地方访问
 public void dining() {
  System.out.println("吃饱了...");
  weight++; //dining方法是类内部成员,可以直接访问本类私有成员
 } 

 //走路的方法,公有的,可以从任何地方访问
 public void walk() {
  System.out.println("走累了...");
  weight--; //walk方法是类内部成员,可以直接访问本类私有成员
 }
} 

public class Test {
 public static void main(String[] args) {
  Student std = new Student(); //实例化一个Student对象
  std.age = 18;  //试图从类外部访问私有成员,将会报出一个错误
  std.dining();  //允许访问公有成员
 }
}

访问权限(续)
加上访问修饰符有时候可能会给操作数据带来不便,但可以在很大程度上保证数据的安全;
一般地,我们会将成员属性声明为private,而将成员方法声明为public,但这样做并不是绝对的;
有时候,类外部可能要操作到某些私有数据成员,那么就可以增加一个公有的方法,再由这个方法来操作私有数据,避免因类外部的误操作而造成的数据损坏;
因为main方法要由类外部的虚拟机来调用,所以main方法必须声明成public。
如:修改Student类

class Student { //定义学生类
 private String name;  //姓名,私有
 private int age;    //年龄,私有
 private float weight; //体重,私有 

 public void setName(String name) {  //为姓名赋值的方法,公有
  this.name = name;
 }
 public void setAge(int a) {    //为年龄赋值的方法,公有
  age = a;
 }
 public void setWeight(float w) { //为体重赋值的方法,公有
  weight = w;
 }
 public void display() {      //将所有信息打印出来的方法,公有
  System.out.println("姓名:" + name + ",年龄:" + age + ",体重:" + weight);
 }
 public void dining() {……}     //吃饭的方法,公有,代码略
 public void walk() {……}      //走路的方法,公有,代码略
} 

public class Test {
 public static void main(String[] args) {
  Student std = new Student(); //实例化学生类对象
  std.setName("张三");      //为姓名赋值
  std.setAge(18);        //为年龄赋值
  std.setWeight(55);      //为体重赋值
  std.dining();         //调用吃饭的方法
  std.display();        //将信息打印出来
 }
}

对象初始化
在上例中,只能逐个地为数据成员赋值,如果想在对象实例化的同时就初始化成员属性,就使用到了构造方法;
构造方法是特殊的成员方法,它与类同名,在对象实例化时由虚拟机自动调用;
请注意:构造方法没有返回值类型,也不能有返回值。
构造方法示例:

/*定义ConstructorDemo类,对构造方法进行测试*/
class ConstructorDemo
{
 /*构造方法,方法名与类名完全一致
 无需指定返回值类型,也不能有返回值*/
 public ConstructorDemo()
 {
  System.out.println("这是构造方法");
 }
} 

/*Test类,用来容纳main方法
一般将包含有main方法的类声明为public*/
public class Test
{
 /*main方法,程序入口*/
 public static void main(String[] args)
 {
  /*实例化ConstructorDemo类的对象*/
  ConstructorDemo cd = new ConstructorDemo();
 }
}    //会输出“这是构造方法”

构造方法
正是由于在实例化对象的同时会自动调用构造方法,所以构造方法一般用来给数据成员分配资源或初始化数据成员;
构造方法的一般形式:
  访问权限 类名(形参列表) {
    方法体
  }
因为是由虚拟机来调用构造方法,所以构造方法一般应定义成public。

如:为Student类添加构造方法

class Student { //定义学生类
 private String name;  //姓名,私有
 private int age;    //年龄,私有
 private float weight; //体重,私有 

 //构造方法,根据传递进来的参数,为数据成员赋值
 public Student(String n, int a, float w) {
  //分别为每个数据成员赋初始值
  name = n;
  age = a;
  weight = w;
 }
 public void setName(String n) {……} //为姓名赋值的方法,公有,代码略
 public void setAge(int a) {……}   //为年龄赋值的方法,公有,代码略
 public void setWeight(float w) {……} //为体重赋值的方法,公有,代码略
 public void display() {……}  //将所有信息打印出来的方法,公有,代码略
 public void dining() {……}  //吃饭的方法,公有,代码略
 public void walk() {……}   //走路的方法,公有,代码略
} 

public class Test {
 public static void main(String[] args) {
  //利用构造方法,为数据成员指定初始值
  Student std = new Student("张三", 18, 55);
  std.display();        //将信息打印出来
 }
}

构造方法(续)
每个对象在生成时都必须执行构造方法,而且只能执行一次;
如果构造方法调用失败,那么对象也无法创建;
不可以显式地直接调用构造方法;
在没有定义构造方法的情况下,类会自动产生一个无参数的默认构造方法,这个默认的构造方法什么都不做;
一旦显式地定义了构造方法,默认构造方法自动消失。故一般定义无参和有参两个构造方法。

总结

  • 对象由状态(属性)和行为(方法)组成;
  • 类是具有相同属性和方法的对象的集合;
  • 封装可以隐藏对象实现的具体细节;
  • 必须先实例化类的对象,才可以访问到其中的成员;
  • 成员运算符用于访问对象的成员;
  • 成员可以定义为公有,也可以定义为私有;
  • 构造方法一般用来初始化对象中的数据成员;
  • 如果不定义构造方法,将有默认的构造方法,一旦定义,默认的构造方法自动消失。
(0)

相关推荐

  • Java面向对象编程(封装/继承/多态)实例解析

    本文主要介绍了面向对象的三大特征实例解析,下面看看具体内容. 封装 封装一个Teacher和Student类 package com.hz.test; public class Teacher { private String name; private String majorDirection; private String teachCourse; private int teachAge; public Teacher() { super(); } public Teacher(Stri

  • java 面向对象面试集锦

    java  面向对象:这里整理了面向对象的基础知识,帮助大家学习理解,希望能帮助到大家,这里是 根据公司面试资料整理的相关知识: Overload和Override的区别.Overloaded的方法是否可以改变返回值的类型? Overload是重载的意思,Override是覆盖的意思,也就是重写.重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同). 重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子

  • java面向对象的六原则一法则小结

    1. 单一职责原则:一类只做它该做的事. 2. 里氏替换原则:子类必须能够替换基类(父类),否则不应当设计为其子类. 3. 依赖倒换原则:设计要依赖于抽象而不是具体化. 4. 接口隔离原则:接口要小而专,不能大而全. 5. 开闭原则 :一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 6. 组合/聚合复用原则:尽量使用组合和聚合,少使用继承的关系来达到复用的原则. 7. 迪米特法则:低耦合,高内聚. 以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多

  • Java中面向对象的知识点总结

    一.对象和类的概念 类:对具有相同属性和方法的一类事物的抽象. 对象:具体的某一事物,代表自身的一些属性和方法. 二.类(对象)之间的关系 关联(组合.聚合),继承,依赖.实现 三.面向对象设计思想 面向对象--->考虑哪些类,对象--->类和对象有属性.方法----->类和类之间的关系 四.重载.重写和隐藏 1). 重载(overload): 方法重载就是多个方法名称相同但是参数类型或者参数个数不同的方法,与返回值类型和修饰符无关 class Test { public int tes

  • Java面向对象的三大特征

    java面向对象的三大特征:"封装.继承.多态".更多Java技术知识,请登陆疯狂软件教育官网.微信搜索微信号:疯狂软件,参加2015年优惠活动,有机会获得优惠劵和代金劵. 以本文为例,User类中的变量为私有变量,只能通过创建对象(此时构造方法自动调用)来赋值. 外界只能通过公有方法api()来访问User类. Admin类继承了User类,调用了其构造方法,还重写了method_1方法,增加了一个特有方法power(). User文件 public class User { /**

  • 全方位讲解Java的面向对象编程思想

    什么是面向对象? Object 对象,Oriendted 以-为导向的, Programming 程序设计 面向对象就是使用对象进行程序设计,简写成OOP. SP和OOP对比 面向对象的三大原则      封装  继承   多态 对象 对象是面向对象编程的核心部分,是实际存在的具体实体,具有明确定义的状态和行为: 对象其实就是"数据"和"函数"的封装体,其中: 数据表示自身的状态,也称作"属性"或"成员数据": 函数表示自身的

  • Java语言面向对象编程思想之类与对象实例详解

    在初学者学Java的时候,面向对象很难让人搞懂,那么今天小编就来为大家把这个思想来为大家用极为简单的方法理解吧. 首先我们来简单的阐述面向对象的思想. 面向对象: 官方的语言很抽象,我们把官方的解释和定义抛开.想想,自己有什么,对!!我们自己有手脚眼口鼻等一系列的器官.来把自己所具有的器官就可以看作我们的属性,自己是不是可以喜怒哀乐和嬉笑怒骂,这些是不是我们的行为,那么自己的具有的属性加自己有的行为就称为一个对象. 注意!!我们自己,一个个体是一个对象,因为,你是你,我是我,我们虽然有相同的,但

  • 浅谈Java实现面向对象编程java oop

    一.对象的综述 面向对象编程(OOP)具有多方面的吸引力.对管理人员,它实现了更快和更廉价的开发与维护过程.对分析与设计人员,建模处理变得更加简单,能生成清晰.易于维护的设计方案.对程序员,对象模型显得如此高雅和浅显.此外,面向对象工具以及库的巨大威力使编程成为一项更使人愉悦的任务.每个人都可从中获益,至少表面如此. 所有编程语言的最终目的都是解决企业又或者人在现实生活中所遇到的问题,最初我们的程序可能长这样"11111100001",相信大家都不会陌生,只是大家没这么子去敲过代码.再

  •  Java SE 面向对象编程的3个常用接口

    1.Comparable 前言,想要排序Student.有代码: import java.util.Arrays;   class Student {     public int age;     public String name;     public double score;       public Student(int age, String name, double score) {         this.age = age;         this.name = na

  • Java的面向对象编程基本概念学习笔记整理

    个人理解,编程中所谓的 类¨ 与现实世界中对物体的分门别类中的类是同一个概念,只是在编程中将其借用进来.类代表有一系列共性和相同操作或动作的事物,在编程中即为抽象的数据类型.具体的每个个体(现实世界中).实例变量(对于在编程中来说)就是对象. 类是现实世界某些对象的共同特征(属性和操作)的表示,对象是类的实例. 类的属性:就是类的静态属性的简称,指类内包含的各项数据,如变量或其他类的对象:    类的服务:  则被称为成员函数或方法. ¨ Java中类的定义形式如下: [修饰符] class 类

  • 剖析C++的面向对象编程思想

    面向对象的程序设计 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计) 的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为. 面向过程就是分析出解决问题所需要的步骤,然后用函数逐步实现,再依次调用就可以了. 面向对象和面向过程是两种不同的编程思想,没有哪一种绝对完美,要根据具体需求拟定开发方案.例如,开发一个小型软件或应用程序,工程量小,短时间内即可完成,完全可以采用面

  • 深入讲解Python中面向对象编程的相关知识

    Python从第一天开始就是面向对象的语言.正因为如此,创建和使用类和对象是非常地容易.本章将帮助您在使用Python面向对象编程的技术方面所有提高. 如果没有任何以往面向对象(OO)的编程的经验,那么可能要了解一些基本的入门课程就可以了,或者至少某种形式的教程,让你有了解基本概念. 但是,这里会比较少地介绍面向对象编程(OOP): OOP术语概述 类: 用户定义的原型对象,它定义了一套描述类的任何对象的属性.属性是数据成员(类变量和实例变量)和方法,通过点符号访问. 类变量:这是一个类的所有实

  • 实例讲解Java的设计模式编程中责任链模式的运用

    定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止. 类型:行为类模式 类图: 首先来看一段代码: public void test(int i, Request request){ if(i==1){ Handler1.response(request); }else if(i == 2){ Handler2.response(request); }else if(i == 3){ Handler3

  • 简单讲解Java的Future编程模式

    用过Java并发包的朋友或许对Future (interface) 已经比较熟悉了,其实Future 本身是一种被广泛运用的并发设计模式,可在很大程度上简化需要数据流同步的并发应用开发.在一些领域语言(如Alice ML )中甚至直接于语法层面支持Future. 这里就以java.util.concurrent.Future 为例简单说一下Future的具体工作方式.Future对象本身可以看作是一个显式的引用,一个对异步处理结果的引用.由于其异步性质,在创建之初,它所引用的对象可能还并不可用(

随机推荐