黑马程序员———java 面向对象

——- android培训java培训、期待与您交流! ———-
面向对象

面向对象就是指的编程语言是面向对象的,也就是说它把东西实例化为一个对象,而封装是把对象装起来,与外界互不干扰,继承就是一个类继承另一个类的属性,而多态性就是多种表现形式,具体来说,可以用”一个对外接口,多个内在实现方法”表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。

抽象类(用于多个类的共性)
1:抽象定义:
抽象就是从多个类中将方法名相同而方法体不同的方法抽取出来,本质的内容抽取出来。
例如:自行车和三轮车共性都是车,车就是抽象出来的概念。
2:抽象类:
Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,
包含抽象方法的类就是抽象类。
3:抽象方法的由来:
多个对象都具备相同的功能,但是功能具体内容有所不同,那么在抽取过程中,只抽取了功能定义,
并未抽取功能主体,那么只有功能声明,没有功能主体的方法称为抽象方法。
例如:狼和狗都有吼叫的方法,可是吼叫内容是不一样的。所以抽象出来的动物科虽然有吼叫功能,
但是并不明确吼叫的细节。
4:抽象类的特点:
(1)抽象类和抽象方法必须用abstract关键字来修饰。
(2)抽象方法只有方法声明,没有方法体,定义在抽象类中。
(3)抽象类中不一定有抽象方法,但是有抽象方法的类一定是抽象类.
(4)抽象类不可以被实例化,也就是不可以用new创建对象。原因如下:
抽象类是具体事物抽取出来的,本身是不具体的,没有对应的实例。
例如 动物是一个抽象的概念,真正存在的是猫和狗。
而且抽象类即使创建了对象,调用抽象方法也没有意义。
(5):抽象类通过其子类实例化,而子类需要覆盖掉抽象类中所有的抽象方法后才可以创建对象,
否则该子类也要定义为抽象类。
抽象类的定义格式:
abstract class 类名{}
抽象方法的定义格式:
格式:修饰符 abstract 返回值类型 函数名(参数列表) ;
面向对象程序设计的本质:这些抽象的对象可以被看作具体的实体,这些实体对用来告诉我们作什么的消息进行响应。
面向对象中唯一关心的: 就是接口是什么,就像汽车的发动机一样,我们不必要知道它的结构是什么,只要它能工作就行了。所有的程
序是由一定的属性(数据)和行为(方法)组成的,不同的对象访问通过函数调用来完成,对象间的所有交流都是通过方法调用,
通过对封装数据对象,很大程度上提高复用率。
(二):
面向对象的特征:封装、继承、多态
封装:
  封装是一种把代码和代码所操作的数据捆绑在一起,使这两者不受外界干扰和误用的机制.封装可被理解为一种用做保护的包装器,以防止代码和数据被包装器外部所定义的其他代码任意
访问.对包装器内部代码与数据的访问通过一个明确定义的接口来控制.封装代码的好处是每个人都知道怎样访问代码,进而无需考虑实现细节就能直接使用它,同时不用担心不可预料的副作
用。
  在JAVA中,最基本的封装单元是类,一个类定义着将由一组对象所共享的行为(数据和代码).一个类的每个对象均包含它所定义
的结构与行为,这些对象就好象是一个模子铸造出来的.所
以对象也叫做类的实例。
  在定义一个类时,需要指定构成该类的代码与数据.特别是,类所定义的对象叫做成员变量或实例变量.操作数据的代码叫做成员方法.方法定义怎样使用成员变量,这意味着类的行为和接
口要由操作实例数据的方法来定义。
  由于类的用途是封装复杂性,所以类的内部有隐藏实现复杂性的机制.所以JAVA中提供了私有和公有的访问模式,类的公有接
口代表外部的用户应该知道或可以知道的每件东西.私有的方法数据只能通过该类的成员代码来访问.这就可以确保不会发生不希望的
事情。

类的封装带来的优点:
隐藏类的实现细节;
让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;便于修改,增强代码的可维护性。
继承:
  继承是指一个对象从另一个对象中获得属性的过程.是面向对象程序设计的三大原则之二,它支持按层次分类的概念.例如,波斯猫是猫的一种,猫又是哺乳动物的一种,哺乳动物又是动
物的一种.如果不使用层次的概念,每个对象需要明确定义各自的全部特征.通过层次分类方式,一个对象只需要在它的类中定义是它成为唯一的 各个属性,然后从父类中继承它的通用属性.
因此,正是由于继承机制,才使得一个对象可以成为一个通用类的一个特定实例.一个深度继承的子类将继承它在类层次中的每个祖先的所有属性。
  继承与封装可以互相作用.如果一个给定的类封装了某些属性,它的任何子类将会含有同样得属性,另加各个子类所有得属性.这是面向对象程序在复杂性上呈线性而非几何增长的一个重要概念.新的子类继承其所有祖先的所有属性.子类和系统中的其他代码不会产生无法预料的交互作用。
继承的特点:java只支持单继承,不支持多继承.(也就是说一个子类只能有一个父类)
继承的好处:
* 继承的出现,提高了代码的复用性
* 继承的出现,让类与类之间产生了关系,这个关系的出现是多态的前提.
多态:
  多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用”一个接口,多个方法”来描述.可以通过方法的参数和类型引用。

封装,继承,多态的组合使用
  在由封装,继承,多态所组成的环境中,程序员可以编写出比面向过程模型更健壮,更具扩展性的程序.经过仔细设计的类层次结构是重用代码的基础.封装能让程序员不必修改公有接口
的代码即可实现程序的移植.多态能使程序员开发出简洁,易懂,易修改的代码.例如:汽车

从继承的角度看,驾驶员都依靠继承性来驾驶不同类型(子类)的汽车,无论这辆车是轿车还是卡车,是奔驰牌还是菲亚特牌,驾驶员都能找到方向盘,手刹,换档器.经过一段时间驾驶后,都
能知道手动档与自动档之间的差别,因为他们实际上都知道这两者的共同超类:传动装置.

从封装的角度看,驾驶员总是看到封装好的特性.刹车隐藏了许多复杂性,其外观如此简单,用脚就能操作它.发动机,手刹,轮胎大小的实现对与刹车类的定义没有影响。

从多态的角度看,刹车系统有正锁反锁之分,驾驶员只用脚踩刹车停车,同样的接口可以用来控制若干种不同的实现(正锁或反锁).
这样各个独立的构件才被转换为汽车这个对象的.同样,通过使用面向对象的设计原则,程序员可以把一个复杂程序的各个构件组合在一起,形成一个一致,健壮,可维护的程序。
实例如下介绍:
/**
*多态的表现形式:父类的引用指向子类的对象。
*
*Animal a = new Cat();//类型提升,向上转型。
*
*多态的前提:必须是类与类之间有关系,要么继承,要么实现。并且子类要复写父类中的方法。
*
*多态的利弊: 利,大大提高程序的扩展性。
* 弊,只能使用父类的引用访问父类中的成员。
*
*成员函数在多态调用时。编译看左边,运行看右边。成员变量,无论编译或运行,都看左边。动态绑定。
*静态的都看左边。叫静态绑定。
*/

/*
abstract class Animal {

public abstract void eat();
}
class Cat extends Animal {
public void eat() {
System.out.println(“eat fish”);
}
public void cry() {
System.out.println(“MIMI”);
}
}

class Dog extends Animal {
public void eat() {
System.out.println(“eat bone”);
}
public void KanJia() {
System.out.println(“KanJia”);
}
}

public class TestDuoTai{

public static void main(String[] args){

function(new Dog());
}

public static void function(Animal a) {

a.eat();

if(a instanceof Cat){
Cat c = (Cat) a;
c.cry();
}else if(a instanceof Dog){
Dog d= (Dog)a;
d.KanJia();
}
}
}
二:java 对数组的理解,

数组可以看成是多个相同数据类型的组合(数组的数据可以使任何类型,基础类型或引用类型),对这些数据对象的统一管理;

数组属引用类型,也可看成是对象,每个数据可以看做是对象的成员变量;
一维数组的声明:
type name[ ] 或 type[ ] name;

例如: int [ ] a ; int a[ ]; String[ ] str;
利用关键字 new 创建数组 如: int a[ ] = new int [ 5];
可以进行动态初始化 如:
int a[ ] = new int [ 5];

System.out.print(a[i]+” “);
}
或静态初始化 如:
String str[ ] = { “this”,”is”,”array”,”!”};

——- android培训java培训、期待与您交流! ———-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值