JAVA学习总结-面向对象
前言: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学习总结-面向对象的更多相关文章
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
- 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类
static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...
- java学习之面向对象概念
思考的两种方式: 举例: 把大象放到冰箱里 一.面向过程 :[打开冰箱->把大象放里面->关上冰箱门]面向过程注重的是过程,也就是(动作[函数]),然后按照动作依次去执行就好了. 代表语言 ...
- Java学习(一)--面向对象(一)
面向对象的思想一直指导者我们软件的分析.设计与开发.java语言是一种面向对象的语言.在学习java之前,先回想一以下向过程和面向对象. 一面向过程 面向过程主张按功能来划分系统需求.每一个功能都负责 ...
- Java学习: 面向对象的使用与注意事项
面向对象的使用与注意事项 面向过程:当需要实现一个功能的时候,每一个具体的步骤都需要亲力,详细处理每一个细节面向对象:当需要实现一个功能的时候,不关心具体的步骤,而是找一个已经具有该功能的人,来帮我做 ...
- 程序设计基础·Java学习笔记·面向对象(下)
Java程序设计基础之面向对象(下) (补充了上的一些遗漏的知识,同时加入了自己的笔记的ヾ(•ω•`)o) (至于为什么分P,啊大概是为了自己查笔记方便(?)应该是("` 3′") ...
- 程序设计基础·Java学习笔记·面向对象(上)
Java程序设计基础之面向对象(上) (自适应学习进度而进行记录的笔记,希望有一些小小的用处吧(^∀^●)ノシ) (新人上路,望多指教,如有错误,望指正,万分感谢(o゚v゚)ノ) 目录 一.面向对象 ...
随机推荐
- Docker教程:Docker镜像导出及迁移
http://blog.csdn.net/pipisorry/article/details/51330126 Docker目录分析 安装docker时,默认的安装位置是/var/lib/docker ...
- JavaI/O体系详解
Java中IO操作主要是指使用Java进行输入,输出操作,Java中所有的IO操作类都存放在Java.io包中,在使用时需要导入此包. 在整个Java.io包中最重要的就是5个类和一个接口.5个类指的 ...
- Android初级教程小案例之单选框RadioGroup与复选框CheckBox
Android里面的单选框和html中的其实是一样的效果.这里用到两个控件:CheckBox和RadioGroup.直接上代码: radio.xml布局文件: <?xml version=&qu ...
- 关于Java的移位运算符
/** * 测试移位运算符<br/> * "<<" 左移 : 右侧补0<br/> * ">>" 带符号右移 : ...
- Android官方命令深入分析之Device Monitor
Android Device Monitor是一个提供了图形化界面的可以对Android应用进行调试和分析的独立的工具.Monitor工具不需要IDE环境,比如Android Studio.包括以下工 ...
- 调试bootmgr&winload vista&win7 x86&x64
设置调试bootmgr 1.以管理员权限运行cmd.exe 2.执行以下命令 3. 参照我的另一篇文章<win8 + vmware + windbg 双机调试 >中的第1.3步,建立wi ...
- IT职场: 选择外企利与弊
前几天有个同学打电话问我选择国内企业与外企的利弊,很可笑的是他是学机械的:既然和我完全不在一个行业,因此我只是说了我们IT外企的利与弊,毕竟隔行如隔山. 首先简单自我介绍一下,我所在的公司是美资500 ...
- 海量数据挖掘MMDS week3:流算法Stream Algorithms
http://blog.csdn.net/pipisorry/article/details/49183379 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- Zookeeper运维
一.运维配置 参考:http://zookeeper.apache.org/doc/r3.4.6/zookeeperAdmin.html#sc_configuration 基础配置 ...
- Linux进程实践(1) --Linux进程编程概述
进程 VS. 程序 什么是程序? 程序是完成特定任务的一系列指令集合. 什么是进程? [1]从用户的角度来看:进程是程序的一次执行过程 [2]从操作系统的核心来看:进程是操作系统分配的内存.CPU时间 ...