黑马程序员java自学总结之--面向对象

来源:互联网 发布:苹果录制屏幕软件 编辑:程序博客网 时间:2024/04/28 12:37

一.基本概要

1.对象

对象是对问题领域中事物的抽象!
对象具有如下特征:
1。万物皆为对象;
问题领域中的实体和概念都可以抽象为对象。
2。每个对象都是唯一的;
对象的惟一性来自于真实世界中事物的惟一性。
3。对象具有属性和行为;
对象的行为包括具有的功能及具体的实现。
在建立对象模型时,只关注对象有什么样的功能,而不需要考虑如何实现这些功能。
对象的属性用成员变量表示,对象的行为用成员方法表示。
4。对象具有状态;
状态是指某个瞬间对象的各个属性的取值。
对象的某些行为往往会改变对象自身的状态,即属性的取值。
5。对象都属于某个类,每个对象都是某个类的实例。

2.面向机器:
早期计算机中运行的程序大都是为特定的硬件系统专门设计的,称为面向机器的程序。开发这类程序的语言称为机器语言,也叫作低级语言或二进制代码语言。
这类程序和运行速度和效率都非常高,但是可读性和可种植性及差,随着软件开发规模的扩大,这类面向机器和程序逐渐被以Fortran,C等为代表的面向过程的程序所取代。

3.面向过程:
其中心思想是用计算机能够理解的逻辑来描述和表达待解决的问题及其具体的解决过程。数据结构、算法是面向过程问题求解的核心组成。其中数据结构利用计算机的离散逻辑来量化表达需要解决的问题,而算法则研究如何快捷、高效地组织解决问题的具体过各。
面向过程遵循面向过程的问题求解方法。可以精确、完备地描述具体的求解过程(这里的过程通常是指操作),但却不足以把一个包含了多个相互关联的过程的复杂系统表述清楚。

4.面向对象:
面向对象的实质设计思想——是要让计算机逻辑来模拟现实世界的物理存在,即让计算机世界向现实世界靠拢。
就是使我们分析、设计、实现一个系统的方法尽可能地接近我们认识一个系统的方法。很好地解决面向过程不能清楚表述的复杂系统。面向对象的问题求解包括:
a.面向对象的分析(OOA,Object-Oriented Analysis)
b.面向对象的设计(OOD,Object-Oriented Design)
c.面向对象的编程(OOP,Object-Oriented Programming),简单地说就是描述对象之间的相互作用。

面向过程与面向对象区别:

面向过程,先确定算法再确定数据结构;习惯于建立数据结构存放数据,并定义函数(方法)来操作数据;应用程序单一,即所有功能都包含在几个代码模块中(常常是一个代码模块);面向过程不允许自身定义数据类型,只能使用程序中内置的数据类型。
面向对象,先确定数据结构再确定算法;习惯于构造一个对象模型,将数据与方法组织在一起;常常要使用很多模块,每个模块都提供特定的功能,每个模块都是孤立的,甚至与其他模块完全独立。由类,对象,抽象,封装,继承,多态等特征构成,可以自定义数据类型。

5.java中的类

我自己认为,类是一件事物,他有很多的共性,我们抽象出这个共性,组成一个类,以后符合这些特征的来根据我写的这个类来建立对象。例如:

我们整体的人类,可以抽象出一个人类的对象,人类由手脚,五官,等等相同的特征,但是我们的每一个人都是独一无二的,我们都可以认为是一个对象。

二.java中的面向对象

1.封装:指隐藏对象的属性和实现的具体细节,对外部提供公共的访问方式。

原则:将不需要对外提供的内容都隐藏起来

把属性都隐藏,提供公共方法对其访问

2.继承:提高代码的复用,让类之间产生了关系

必须是类与类之间有所属关系才可以继承。所属关系 is a。
class C{void demo1(){}}class A extends C{//void demo1(){}void demo2(){}}class B extends C{//void demo1(){}void demo3(){}}



Java语言中:java只支持单继承,不支持多继承。
因为多继承容易带来安全隐患:当多个父类中定义了相同功能,
当功能内容不同时,子类对象不确定要运行哪一个。
但是java保留这种机制。并用另一种体现形式来完成表示。多实现。
java支持多层继承。也就是一个继承体系
如何使用一个继承体系中的功能呢?
想要使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中共性功能。
通过了解共性功能,就可以知道该体系的基本功能。
那么这个体系已经可以基本使用了。
那么在具体调用时,要创建最子类的对象,为什么呢?
一是因为有可能父类不能创建对象,
二是创建子类对象可以使用更多的功能,包括基本的也包括特有的。
简单一句话:查阅父类功能,创建子类对象使用功能。
class A{void show(){System.out.println("a");}}class B{void show(){System.out.println("b");}}class C extends A,B{}C c = new C();c.show();
聚集:has a
聚合:
组合:
class Person{String name;int age;}class Student extends Person{void study(){System.out.println("good study");}}class Worker extends Person{void work(){System.out.println("good work");}}class ExtendsDemo{public static void main(String[] args){Student s = new Student();s.name = "zhagnsan";}}

3.抽象类

抽象类的特点:
抽象方法一定在抽象类中。
抽象方法和抽象类都必须被abstract关键字修饰。
抽象类不可以用new创建对象。因为调用抽象方法没意义。
抽象类中的抽象方法要被使用,必须由子类复写起所有的抽象方法后,建立子类对象调用。
如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。
抽象类和一般类没有太大的不同。
该如何描述事物,就如何描述事物,只不过,该事物出现了一些看不懂的东西。
这些不确定的部分,也是该事物的功能,需要明确出现。但是无法定义主体。
通过抽象方法来表示。
抽象类比一般类多个了抽象函数。就是在类中可以定义抽象方法。
抽象类不可以实例化。
特殊:抽象类中可以不定义抽象方法,这样做仅仅是不让该类建立对象。

练习:

abstract 关键字,和哪些关键字不能共存。
final:被final修饰的类不能有子类。而被abstract修饰的类一定是一个父类。
private: 抽象类中的私有的抽象方法,不被子类所知,就无法被复写。
而抽象方法出现的就是需要被复写。
static:如果static可以修饰抽象方法,那么连对象都省了,直接类名调用就可以了。
可是抽象方法运行没意义。
抽象类中是否有构造函数?
有,抽象类是一个父类,要给子类提供实例的初始化。

abstract class Student{abstract final void study();//abstract void study1();void sleep(){System.out.println("躺着");}}class ChongCiStudent extends Student{void study(){System.out.println("chongci study");}}class BaseStudent extends Student{void study(){System.out.println("base study");}}class AdvStudent extends Student{void study(){System.out.println("adv study");}}class AbstractDemo{public static void main(String[] args){//new Student();//new BaseStudent().study();}}
4.接口

接口:初期理解,可以认为是一个特殊的抽象类
当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示。
class用于定义类
interface 用于定义接口。

接口定义时,格式特点:
1,接口中常见定义:常量,抽象方法。
2,接口中的成员都有固定修饰符。
常量:public static final
方法:public abstract
记住:接口中的成员都是public的。
接口:是不可以创建对象的,因为有抽象方法。
需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化。
否则子类是一个抽象类。
接口可以被类多实现,也是对多继承不支持的转换形式。java支持多实现。

interface Inter{public static final int NUM = 3;public abstract void show();}interface InterA{public abstract void show();}class Demo{public void function(){}}class Test extends Demo implements Inter,InterA{public void show(){}}interface A{void methodA();}interface B //extends A{void methodB();}interface C extends B,A{void methodC();}class D implements C{public void methodA(){}public void methodC(){}public void methodB(){}}class InterfaceDemo{public static void main(String[] args){Test t = new Test();System.out.println(t.NUM);System.out.println(Test.NUM);System.out.println(Inter.NUM);}}



补充面试问题:

成员变量和局部变量
作用范围:
成员变量作用于整个类中。
局部变量作用于函数中,或语句中。
在内存中的位置:
成员变量在堆内存中,因为对象的存在,才在内存中存在。
局部变量存在栈内存中。
0 0