面向对象:
概念:
面向对象是一种程序设计思想,计算机程序的设计实质上就是将现实中的一些事物的特征抽离出来描述成一些计算机事件的过程,这种抽象的过程中,我们把具体的事物封装成一个一个的整体进行描述,使被描述的对象具备一些系统性、整体性的的行为和特征,我们把这种设计思想称为面向对象。从现实世界中客观存在的事物出发, 来构造软件系统, 并在系统的构造中尽可能的运用人类的自然思维方式, 面向对象是目前人与计算机沟通最简单的语言思想。
面向对象的三种特征:
封装:1.隐藏对象的属性和实现细节,仅对外提供公共访问方式
封装的原则:
1.将不需要对外提供的内容都隐藏起来
2.把实现细节隐藏,提供可以对其进行访问公共的方式
封装的方式
将某一功能、属性抽离出来,独立写成单独的方法或类
设置访问权限
1.设置访问权限可以限定该功能或属性可以被特定的访问者访问,保证了程序的安全性和功能的稳定性。
2.Java对类和类中成员都定义了特定的访问修饰符
类:public(公共的) 、default(默认的,不写就默认是它)
类中成员:public、protected、default(默认的)、private
/*
类的访问修饰符可以不写(默认的),也可以写public(公共的),一个java文件中只能有一个被public修饰的类,且被public修饰的类类名必须要跟文件名一致(包括大小写一致),否则编译会出错,为了方便阅读,类名的命名规范是单词的首字母大写,多个单词组成的类名每个单词的首字母都大写
*/
继承:继承是从已有的类中派生出新的类,新的类能吸收已有类的数据
属性和行为,并能扩展新的功能,或者说将事物的共性的功能和属性抽
取出来定义成一个父类,让后来具有更多样化实现的子类继承父类。
继承的作用
1.父类具备的方法子类可以直接继承过来,不用重新书写,提高了代码的复用性
2.让类与类之间产生关系,有了关系才有多态的实现
3.Java中只支持单继承,不支持多继承,因为多继承存在安全隐患(当多个父类存在同个功能时,子类不确定要运行哪一个),Java支持多层继承,即父类还可以继承其他类,java用另一种机制解决单继承的局限性,即多实现
继承的特征
1.继承关系是传递的。若类C继承类B,类B继承类A(多层继承),则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
2.继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
3.继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
4.继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
5.提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。
//建一个A类 class A{ //成员变量 其中num是实参 int num=0; //成员方法,其中 i 是型参 public A(int i){ //输入int型文件输出下面 System.out.println("aaaaaaaaaaaaaaaaaaa"); System.out.println("i= "+i); //把输入的i赋值给成员变量num num=i; } } //B继承A class B extends A{ int num=0; //成员方法B. public B(){ //继承类A的方法.因为B继承了A必然继承了A的特性.所以输入int值10令方法实现. super(10); System.out.println("bbbbbbbbbbbbbbbbbbbb"); //这里的num是类B的. System.out.println("num= "+num); //如果想显示类A的num则需要用下列的super.num.这里注意num在类A中需是成员变量才可以. System.out.println("super.num= "+super.num); } } //建立测试类C public class C{ //main public static void main(String aa[]){ //new 一个对象B() new B(); } }
多态
定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
两种不同的表现形式:重载和重新
重载和重写
重载:重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数类型。方法重载就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义,调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法。方法名要一样,但是参数类型和个数可以不同。
重载的规则:
1、必须具有不同的参数列表;
2、可以有不责骂的返回类型,只要参数列表不同就可以了;
3、可以有不同的访问修饰符;
4、可以抛出不同的异常;
重写:若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。子类函数的访问修饰权限不能少于父类的。在JAVA语言中,java.lang.Object类是所有类最根本的基类(或者叫父类、超类),如果我们新定义的一个类没有明确地指定继承自哪个基类,那么JAVA就会默认为它是继承自Object类的。
重写方法的规则:
1、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
2、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。
3、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:
父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。
重写与重载的区别在于:
重写多态性起作用,对调用被重载过的方法可以大大减少代码的输入量,同一个方法名只要往里面传递不同的参数就可以拥有不同的功能或返回值。
用好重写和重载可以设计一个结构清晰而简洁的类,可以说重写和重载在编写代码过程中的作用非同一般.