前言:java面向对象中的知识可以说是整个java基础最核心的部分,不知不觉已经学完快2个月了,是时候复习一波了,刚开始学习的时候被绕的很懵逼,这次总结完毕之后有了很多新的感悟...

================================================================================================================================================

1,什么是类?什么是对象?

简单来说,类是抽象出某一类事物的行为和特征,并进行的封装,特征称之为属性,行为称之为方法;

对象就是这一类的具体实例,对象拥有这个类的所有属性和方法

举个例子:

所有的人是一个类,人所具有的属性:身高和体重...,人具有的方法:吃饭,睡觉..

具体到某一个人是一个对象,比如小明就是一个对象,小明有身高,体重,可以吃饭,可以睡觉..

java编程思想中是这么描述对象的:

对象具有状态,行为,和标识.这意味着每一个对象都可以拥有内部数据(它们给出了该对象的状态)和方法(它们产生行为),并且每一个对象都可以与其他对象区分开来,具体来说,就是每一个对象在内存中都有一个唯一的地址.

2,什么是面向对象?为什么要面向对象?

官方话:

面向对象(Object Oriented)是一种新兴的程序设计方法,或者是一种新的程序设计规范(paradigm),其基本思想是使用对象、类、继承、封装、多态等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。面向对象是为了解决系统的可维护性,可扩展性,可重用性....

我的理解:

首先,面向对象是一种设计程序的方式,是一种设计思想.

其次,面向对象节省代码,思路清晰,便于扩展.你所创建出的对象就是给你提供服务的.

3,面向对象的三大特征:

一、封装

   封装是实现面向对象程序设计的第一步,封装就是将属性和方法放在一个类中。对外提供服务时尽可能的隐藏对象内部细节,只保留有限的接口和方法;

  封装的意义:
  封装的意义在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中属性被看作是一个中心的元素并且和使用它的方法结合的很密切,从而保护  它不被其它的方法意外的修改。

  可以通过对类的成员设置一定的访问权限,实现类中成员的信息隐藏。

  • private:类中限定为private的成员,只能被这个类本身访问。如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。
  • default:类中不加任何访问权限限定的成员属于缺省的(default)访问状态,可以被这个类本身和同一个包中的类所访问。
  • protected:类中限定为protected的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。
  • public:类中限定为public的成员,可以被所有的类访问。

二, 继承

Java的类可以分为三类:

  • 类:使用class定义,没有抽象方法
  • 抽象类:使用abstract class定义,可以有也可以没有抽象方法
  • 接口:使用inerface定义,只能有抽象方法,(也可以没有),接口里的变量默认使用public static final修饰

在这三个类型之间存在如下关系:

  • 类可以extends:类、抽象类(必须实现所有抽象方法),但只能extends一个,可以implements多个接口(必须实现所有接口方法)--->单继承多实现
  • 抽象类可以extends:类,抽象类(可全部、部分、或者完全不实现父类抽象方法),可以implements多个接口(可全部、部分、或者完全不实现接口方法)
  • 一个接口可以继承多个接口

继承以后子类可以得到什么:

  • 子类直接拥有父类非private的属性和方法
  • 子类可以添加自己的属性和方法,即对父类进行扩展
  • 子类可以重写父类的方法

关于构造方法:

  • 构造方法不能被继承,子类可以通过super()显式调用父类的构造方法
  • 创建子类对象时,编译器会自动调用父类的无参构造方法
  • 如果父类没有定义无参构造方法,子类必须在构造方法的第一行代码使用super()显式调用
  • 类默认拥有无参构造方法,如果定义了其他有参构造方法,则无参构造方法失效,所以父类没有定义无参构造方法,不是指父类没有写无参构造方法。 

Java中通过super来实现对父类成员的访问,super用来引用当前对象的父类。super 的使用有三种情况:

  • 访问父类被隐藏的成员变量
  • 调用父类中被重写的方法
  • 调用父类的构造函数

继承的意义:

  • 代码重用是一点,最重要的还是向上转型,即父类的引用变量可以指向子类对象,这是Java面向对象最重要特性多态的基础

三, 多态

在了解多态之前,先了解以下几点:

什么是相同的方法:

  • 一个方法可以由:修饰符+返回值+方法名+参数+throw的异常+方法体6部分组成
  • 其中只有方法名和参数是唯一性标识,意即只要方法名和参数相同那他们就是相同的方法
  • 所谓参数相同,是指参数的个数,类型,顺序一致,其中任何一项不同都是不同的方法

什么是重载:

  • 重载是指一个类里面(包括父类的方法)存在方法名相同,但是参数不一样的方法,参数不同可以是不同的参数个数、类型或顺序
  • 如果仅仅是修饰符、返回值、throw的异常不同,那这是2个相同的方法,编译都通不过,更不要说重载了

什么是重写:

  • 子类中存在和父类相同的方法即为重写(有特殊情况,请注意下面重写的规则),何谓相同方法请牢记前面的描述,方法名和参数相同,包括参数个数、类型、顺序

重写的规则:

  • 类不能覆盖父类private的方法,private对子类不可见,如果子类定义了一个和父类private方法相同的方法,实为新增方法
  • 重写方法的修饰符权限一定要大于或等于被重写方法的修饰符权限(public > protected > default )
  • 重写抛出的异常需与父类相同或是父类异常的子类,或者重写方法干脆不写throws
  • 重写方法的返回值必须与被重写方法一致,否则编译报错
  • 静态方法不能被重写

什么是多态?

同一操作作用于不同的对象,可以产生不同的执行结果,这就是多态性。

Java的多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(运行时多态)。

  • 编译时多态:在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来调用相应的方法。
  • 运行时多态:当父类引用引用指向子类对象时,被引用的对象的类型决定了调用谁的方法,这个被调用的方法必须是在父类中定义过的,也就是说被子类重写的方法
 class Animal {
public void speak() {
System.out.println("我是动物");
}
} class Dog extends Animal {
public void speak() {
System.out.println("汪汪...");
}
} class Cat extends Animal {
public void speak() {
System.out.println("喵喵...");
}
} public class Test {
public static void main(String args[]) {
Animal animal = new Dog();
animal.speak(); // 汪汪...
animal = new Cat();
animal.speak();// 喵喵...
}
}

稍微复杂一点的案例:

 class Animal {
public void speak1() {
System.out.println("我是动物..");
speak2();
}
private void speak2() {
System.out.println("我是一只凶猛的动物");
}
} class Dog extends Animal {
public void speak1(String name) {
System.out.println("汪汪...");
}
public void speak2() {
System.out.println("我是一只泰迪");
}
} public class Test {
public static void main(String args[]) {
Animal animal = new Dog();
animal.speak1();
// 我是动物..
// 我是一只凶猛的动物
}
}

JAVA学习总结-面向对象的更多相关文章

  1. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  2. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  3. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  4. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  5. java学习之面向对象概念

    思考的两种方式: 举例: 把大象放到冰箱里 一.面向过程 :[打开冰箱->把大象放里面->关上冰箱门]面向过程注重的是过程,也就是(动作[函数]),然后按照动作依次去执行就好了. 代表语言 ...

  6. Java学习(一)--面向对象(一)

    面向对象的思想一直指导者我们软件的分析.设计与开发.java语言是一种面向对象的语言.在学习java之前,先回想一以下向过程和面向对象. 一面向过程 面向过程主张按功能来划分系统需求.每一个功能都负责 ...

  7. Java学习: 面向对象的使用与注意事项

    面向对象的使用与注意事项 面向过程:当需要实现一个功能的时候,每一个具体的步骤都需要亲力,详细处理每一个细节面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做 ...

  8. 程序设计基础·Java学习笔记·面向对象(下)

    Java程序设计基础之面向对象(下) (补充了上的一些遗漏的知识,同时加入了自己的笔记的ヾ(•ω•`)o) (至于为什么分P,啊大概是为了自己查笔记方便(?)应该是("` 3′") ...

  9. 程序设计基础·Java学习笔记·面向对象(上)

    Java程序设计基础之面向对象(上) (自适应学习进度而进行记录的笔记,希望有一些小小的用处吧(^∀^●)ノシ) (新人上路,望多指教,如有错误,望指正,万分感谢(o゚v゚)ノ) 目录 一.面向对象 ...

随机推荐

  1. PA模块报错-实际返回的行数超出请求的行数(分析标准FORM报错解决思路)

    录入预算报错时报错: 分析:这个错误是select into 语句返回多行的结果,但具体在哪? 两种方法查找,trace 或者debug 1.trace 启用调试 获取trace文件 -bash-3. ...

  2. Java进阶(三十) 判断字符串编码类型

    java 判断字符串编码类型 public static String getEncoding(String str) { String encode = "GB2312"; tr ...

  3. 从websphere6.1迁移到weblogic10.3的问题总结

     系统采用war包的方式部署. 问题一: ####<2011-3-29 下午05时17分43秒 CST> <Info> <ServletContext-/MIS-be ...

  4. Mybatis插件原理分析(三)分页插件

    在Mybatis中插件最经常使用的是作为分页插件,接下来我们通过实现Interceptor来完成一个分页插件. 虽然Mybatis也提供了分页操作,通过在sqlSession的接口函数中设置RowBo ...

  5. xml解析方式之JAXP解析入门

    XML解析 1 引入 xml文件除了给开发者看,更多的情况使用[程序读取xml文件]的内容.这叫做xml解析 2 XML解析方式(原理不同) DOM解析 SAX解析 3 XML解析工具 DOM解析原理 ...

  6. c++中各个数据类型的大小

    来哦金额各种数据类型有助于我们对这门语言的更好掌握,更好的利用之来编程,下面是一个简单的获得数据类型的大小的程序,虽然简单,但实用性却很高. #include <iostream> usi ...

  7. 怎样将Android手机弄死机?

    将Android手机弄死机目前知道有两种方式: 第一种: 以root权限在shell中执行 stop 通过 start 但是这种串口还是可以用 第二种: suecho "c" &g ...

  8. 开源库BaseRecyclerViewAdapterHelper

    相信大家RecyclerView应该不会陌生,大多数开发者应该都使用上它了,它也是google推荐替换ListView的控件,但是用过它的同学应该都知道它在某些方面并没有ListView使用起来方便, ...

  9. 手把手带你画一个漂亮蜂窝view Android自定义view

    上一篇做了一个水波纹view  不知道大家有没有动手试试呢点击打开链接 这个效果做起来好像没什么意义,如果不加监听回调 图片就能直接替代.写这篇博客的目的是锻炼一下思维能力,以更好的面多各种自定义vi ...

  10. 【Coding算法导论】第4章:最大子数组问题

    Coding算法导论 本系列文章主要针对算法导论一书上的算法,将书中的伪代码用C++实现 代码未经过大量数据测试,如有问题,希望能在回复中指出! (一)问题描述 给定一个数组,求数组中连续的子数组的和 ...