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

---------------------- 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培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值