标签:
java面向对象的特征:封装,继承,抽象,多态;
--1--.封装:
什么叫做封装?
封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。
面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。
封装是一种信息隐藏技术,在java中通过关键字private实现封装。什么是封装?封装把对象的所有组成部分组合在一起,封装定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。
来个荔枝:
public class Man { //对属性的封装,一个男人有姓名,年龄,妻子这些都属于私有属性 private String name; private int age; private Woman wife; //对方法的封装 //该人对外界提供的方法封装,可以设定妻子,姓名,年龄,也可以获取他的姓名和年龄(妻子就不能随意获取了) public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void setWife(Woman wife) { this.wife = wife; } }
public class Woman { //对属性的封装,一个女人有姓名,年龄,妻子这些都属于私有属性 private String name; private int age; private Man husband; //对方法的封装 //该人对外界提供的方法封装,可以设定丈夫,姓名,年龄,也可以获取他的姓名,年龄(丈夫也不能随意获取) public void setHusband(Man husband) { this.husband = husband; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
接下来用另外一个荔枝来解释另一个好处:
对方法的封装:
public class Show { public static void show(String str){ System.out.println(str); } }
public class User { public static void main(String[] args){ Show.show("封装"); } }
System.out.println(str);直接调用Show.show();方法即可;
封装的作用:
1.对象的数据封装特性彻底消除了传统结构方法中数据与操作分离所带来的种种问题,提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担。
2.对象的数据封装特性还可以把对象的私有数据和公共数据分离开,保护了私有数据,减少了可能的模块间干扰,达到降低程序复杂性、提高可控性的目的。
--2--继承
什么是继承?
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以分隔符先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。
一些基本特征:
(1)继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,什么是继承?还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
(2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
(3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
(5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于 安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。
--3.抽象--
什么是抽象?
用了关键词abstract声明的类叫作"抽象类"。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。"抽象方法",属于一种不完整的方法,只含有一个声明,没有方法主体(语法:abstract
void f();)。
如果从一个抽象类继承,而且想生成新类型的一个对象,就必须为基础类中的所有抽象方法提供方法定义。
如果不这样做(完全可以选择不做),则衍生类也会是抽象的,而且编译器会强迫我们用abstract 关键字标志那个类的“抽象”本质。
即使不包括任何abstract 方法,亦可将一个类声明成“抽象类”。如果一个类没必要拥有任何抽象方法,而且我们想禁止那个类的所有实例,这种能力就会显得非常有用。
抽象类往往用来表征我们在对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。比如:如果我们进行一个图形编辑软件的开发,就会发现问题领域存在着圆、三角形这样一些具体概念,它们是不同的,但是它们又都属于形状这样一个概念,形状这个概念在问题领域是不存在的,它就是一个抽象概念。正是因为抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能够实例化的。
这里我们有不得不谈到抽象和接口的区别:什么是接口?
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
两种含义:一,Java接口,java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做"Java接口",后者叫做"接口"。
接口实现和类继承的规则不同,为了数据的安全,继承时一个类只有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承缺点,继承和接口的双重设计既保持了类的数据安全也变相实现了多继承。
1.abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。 继承抽象类使用的是extends关键字,实现接口使用的是implements关键字,继承写在前面,实现接口写在后面。如果实现多个接口,中间用逗号分隔。例:
public class Main extends JApplet
public class Main implements Runnable
public class Main extends JApplet implements ActionListener
public class Main extends JApplet implements ActionListener, Runnable
2.在abstract class中可以有自己的数据成员,也可以有非abstract的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。3.abstract class和interface所反映出的设计理念不同。其实abstract
class表示的是"is-a"关系,interface表示的是"like-a"关系。
4.实现接口的类必须实现其中的所有方法,继承自抽象类的子类实现所有的抽象方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
5.接口中定义的变量默认是public
static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
6.抽象类中的变量默认具有
friendly权限,其值可以在子类中重新定义,也可以重新赋值。
7.接口中的方法默认都是
public abstract 类型的。
--4.多态--
什么是多态?
意义:
1.同一类型的引用指向不同的对象时有不同的实现
---行为多态:cut()方法:对于理发师为剪头发;对于厨师是切菜;对于伐木工是砍树;
2.同一个对象被造型为不同的类型时有不同的功能
---对象的多态:person对象:对于父母是孩子;对于老师是学生;对于孩子是父母
向上造型:
1.父类引用指向子类对象;
2.能造型成的类型:父类以及实现的接口;
class A{ public method(){ ...... } } class A1 extends A { public method(){ ...... } } class A2 extends A{ public method(){ ...... } }A a=new A1(); 出现多态了,对象的引用指向了他子类A1的new出来的对象 ,method方法的指针已经指向A1的method,当他调用method方法时候,调的就是A1的方法
A a=new A2(); 出现多态了,对象的引用指向了他子类A2的new出来的对象 ,method方法的指针已经指向A2的method,当他调用method方法时候,调的就是A2的方法
a.method(); 调用A2的method方法
标签:
原文地址:http://blog.csdn.net/duyuehan/article/details/51172687