---------------------- android培训、java培训、期待与您交流! ----------------------
一.什么是面向对象?
把数据及对数据的操作方法放在一起,作为一个相互依存的整体--对象,对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本来的方法来进行处理,类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通讯,程序流程由用户在使用中决定。
对象即为人对各种具体物体抽象后的一个概念,人们每天都要接触分钟各样的对象,如手机就是一个对象。
在面向对象的编程方式中,对象拥有多种特性,如手机有高度、宽度、厚度、颜色、重量等特性。这些特性被称为对象的属性,对象还有很多功能,如手机可以听音乐、打电话、发信息、看电影等工作共能,这些功能被称为对象的方法,实际上这些方法是一种函数。而对象又不是孤立的,是有父子关系的,如手机属于电子产品,电子产品属于物体等,这种父子关系被称为对象的继承性。在编程中,把所有数据都已经命名。这些数据根据就是对象的属性,可以被程序访问。对象还包括很多函数,这些函数被称为对象的方法,也可以被程序访问,不过在外部访问对象内的属性方法,必须先应用对象,然后用点号访问对象的属性和方法。
二.面向对象的三大特性
1.封装
对属性而言,即属性的封装
定义:将类的属性封装起来,通过公有的方法进行属性的赋值,并在方法中进行一定的逻辑判断,再通过公有的方法进行属性的取值。
步骤:1.属性设置为Private 2.提供public 方法进行读写操作
属性的封装,构造方法:
public holle(int a,int b,int c){
// 如下才是完全意义的封装
setA(a);
setB(b);
setC(c);
/*如果是:
this.a=a;
this.b=b;
this.c=c;
则是假封装*/
}
2.继承
java中用extends关键字表示一个类继承另一个类
单继承:java中类和类之间是单继承,只有有一个直接父类
继承什么:只有private和构造方法不可以被继承,其他的均可以被继承,对于静态属性或方法虽然被继承了,但依旧属于父类而不从属于子类继承,这里注意super关键字的使用。
3.多态
一个事物的多种形态
多态有四种情况:
1.基本类型的多态
2.方法的多态(同名方法的多种形态,从而进行重载或者重写)
3.类或者接口的多态(Person p = new Teacher()),此时Person是类,或者 Person p = new PersonImp(),此时Person是接口
4.参数的多态(设计到类型自动提升,实质也是基本类型或类和接口的多态)
两个定义
一般情况下的多态说的是方法、类或者接口的多态,因此要记住:
1.如果把子类对象当做父类对象来看,那么就只能访问子类中有定义的属性和方法:
2.如果子类将父类的方法覆盖了,而把子类兑现当作父类对象来看,再调用该方法时,其实调用的是覆盖后的方法。
例如:
Person p = new Teacher(); //如果在子类覆盖了父类的test()方法,当p.test()时,访问的是子类中覆盖了父类中的test()方法
需要注意的是:
1.P只能访问Person的属性和方法(私有),以及子类中覆盖了父类的方法
2.如果想访问Teacher类中的属性和一搬方法,只能对p惊醒强制类型装换
3.如果想访问Person类中已经被覆盖的方法,可在子类的覆盖方法中加上super.test()
三.重写
当父类的方法不能满足子类的要求时,需要对父类的方法进行重写(重写也叫覆盖)
要求:
方法名相同
参数列表相同
返回类型相同(从JDK5开始,返回类型可不同)
访问权限不能比父类更小
不能抛出比父类更大的异常
例如:
从J2se5.0开始在重新定义方法时,您可以重新定义返回值的形态重新定义的访问
值形态必须是父类别中同一方法返回形态的子类别
poublic class A{
protected String name;
public A(String name){
this.name = name;
}
public A getCopied{
return new A(name);
}
}
public class B extends A{
protected String crest;
public B(String name,String crest){
super(name);
this.crest = crest;
}
public B getCopied(){
return new B(name ,crest);
}
}
四、static
1.修饰:用于修饰属性、一般方法、内部类、语句块的
2.意义:用于static修饰的是类相关的,方法在方法去(或者将方法区池化,说池中也可)不加表示实例相关的(池:常驻内存,即使对象小时,池也存在)
3.静态比那两和实例变量的被区别:
静态变量在内存中只有一个拷贝,运行时java虚拟机只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配,可以通过类名直接访问静态变量
对于实例变量,每穿件一个实例就会为实例变量分配一次内存
4.static变量的作用
能被类所有实例共享,可作为实例之间进行交流的共享数据
如果类的所有实例都包含一个相同的常量属性,可把属性定义为静态常量类型,从而节省内存空间
五、语句块
1.static代码块:属于类的,用来初始化类,给类的静态变量赋初始值static{代码}
2.语句块:属于某个实例的,每创建一个实例调用一次语句块,先语句块,后构造器
六、final关键字
1.可以修饰类、方法、变量
被修饰的类不可别继承,方法不可覆盖,变量的值不可改变
七、抽象类
1.abstract修饰的类为抽象类
2.抽象类不能被实例化的原因:
从语义上讲,抽闲类表示从一些具体类中抽闲出来的类型,例如苹果类、香蕉类是具体类,而水果类则是抽象类,
在自然界并不存在说过类本身的实例,而只存在具体类的实例
在语法上,抽象类中标包含抽象方法,例如:
abstract class base{
public void methodl(){...}
public abstract void method2();
}
base base = new base();
base.methodl();
base.method2();//运行时虚拟机无法执行这个方法,因为他是抽象方法,没有方法体
3.抽象类可以没有抽象方法,但有抽象方法的类一定是抽象类
4.子类抽象为父类成为:泛化
5.模板设计模式:所谓的模板即指抽象的父类,比如桑账号类即用这种设计模式
八、接口
1.接口和类是平级的,可以把他看成特殊格式的抽象,但接口不是类
2.接口的特殊性体现在
接口的属性默认:public、static、final,且只能是这三个关键字修饰
接口的方法默认:public abstract,且只能是这两个关键字修饰接口没有够走啊方法,但抽象类有构造方法,因此必须对接口的属性直接赋值
接口与接口之间可以多继承
关键字不一样:interface(和class统计的关键字有:interface 和 enum)
实现接口需要implements关键字,且可以实现多个接口
接口的好处:
接口可以传递一些模块交互的信息,因无法实现的代码,因此安全接口可以定义一些规范,他是指定的标准,把服务的指定者和实现者分离开
注意:
abstravt 不可以和private、final、static中的任何一个一起出现(static修饰后,即使实现类后,调用的还是父类的,而父类方法没有实现,因此static不支持多态)
接口最大的用处:在于降低系统的耦合性(可扩展性、可维护性)
---------------------- android培训、java培训、期待与您交流! ----------------------