黑马程序员————面象对象的基本知识要点

来源:互联网 发布:仿美团源码 编辑:程序博客网 时间:2024/05/07 23:10

面象对象的基本知识要点

一:类
  1.类的声明及实例化

   类是面向对象关键,可以说没有类就没有对象;
 
   类具有两个优点,
 
   首先,他允许封装;即将数据和方法封装起来使得这方面的信息和其他程序有效的分开,
 
   封装的好处是如果修改了这个类,只要没改变这个类中的方法就不需要动别的程序;
 
   类的第二个优点是允许继承。
   类由两部分组成,
 
   第一部分是类的变量的声明,到二部分类中的方法;以下是创建一个叫test的类:
  在上面声明一个类时使用了修饰符"public".在声明类时可以使用三中说明符:public,final和abstract。
   public类意味这个类可以被任何对象使用和扩展,而且与他的包无关
   final类则表明这个类没有任何子类;
   abstract类即说明这个类是一个抽象类;
   如果类声明前没有任何修饰符,则默认为protected类,即只有同一个包中的对象才能使用该类。
   前面已经说了类有个优点是允许继承,这就说明新建的类可以使用已建类的变量和方法,
 
   这样通过基于简单的类建立较大的类的方法,可以减少许多代码的编写,也减少了在程序中查找和修改错误的工作;
 
   以下例子建立一个类MyClass,他继承了类test中所有的变量和方法:
   public class MyClass extends test{}
   其中类MyClss被称为子类,类test被称为父类或超类.
   当创建了类后,就可以用new来创建类的一个实例,并不是所有的类都需要创建他的实例,
 
   如果要使用的类中的方法或变量是静态的,就可以不用创建这个类的实例,
 
   但是静态的方法只能引用静态的类变量(System类的out变量是一个例外);以下例子创建类test的一个实例:
   test mytest=new test();
   创建类的实例是为了要引用这个类中的变量或方法,前面已经为类test创建了一个实例mytest,
 
   如果类test中包含了一个方法changtest(),可以用如下方式来引用:
   mytest.changtest();

   2.类的变量
   声明类的变量和声明类类似,前面可以跟上修饰符;变量有以下几种修饰符:
   public--变量在所有类中可视;包括包中的类和所有子类。
   protected--变量可以被当前类中的所有方法访问,但是在当前包以外的类中不可见。
   private--变量只能被当前类中的所有方法访问。
   static--声明此变量为静态变量。
   final--该修饰符说明此变量的值在运行期间不能被修改。
   为什么不把所有变量都声明成全局变量呢?有两个原因:
 
   第一个原因是这样做将浪费大量的内存;
 
   第二个原因是如果把所有变量都声明成全局变量会使得程序难以阅读。
   在类中有两个特殊的变量:this和super;
   在以下两种情况中需要使用this变量:
   在类中有两个变量同名,其中一个属于当前类而另一个属于某个特定的方法。
   当某个类需要将类作为参数传递给某个方法。
   以下情况需要使用super变量:
   当覆盖方法时,有时候希望使用老方法中的代码,这是可以使用super变量来获取原来的代码。
  3.有时候为了做一个项目需要建立一大堆的类,这些类文件就象没有子目录或文件夹的硬盘一样是杂乱无章的,
 
    为了方便管理所以引入了包,这样就可以将有着相关的类放在一个包中,包就象是文件夹或子目录。
 
    要想使某个类成为包的成员,必须使用package来声明他,
 
    要注意的是package语句必须是文件的第一行,package语句前面除了空白和注释不能有任何东西;例如:bitscn_com
   package packagename;
   如果要引用包packagename中的类则用以下方式:
   import packagename.*;
   以上命令是引用包packagename中的所有类,如果你只引用这个包中的某个类可以用以下方式:
   import packagename.classname;
   也许有人会问引用整个包中的类不好吗?为什么还要指定是某个类呢?原因有以下几点:
  首先当引用不在本地机器上的整个包,程序将通过网络将包的所有文件都拖过来,如果这个包有上千个类,而你只使用其中很少的部分,将浪费很多资源。
  如果引用的两个包中有共享的文件名(例如包pack1中有个叫classname的类,pack2中也有个叫classname的类,如果你使用importpack1.*;import pack2.*),你的系统就要崩溃了。
  4.下面就用一个例子来详细介绍如何创建,实例一个类:  ***********************************************************************************************
  二:接口
  1.
前面讲了类有个重要的特性就是继承,但是一个类只能有一个父类,
 
    为了实现象C++中的多继承性,就必须使用接口;接口和类非常相似,接口用于定义几个类具有的但又不在这些类中定义的功能,
 
    通过在接口中设置这些方法,描述出共同的特性,至于如何实现则是类本身的事。
 
    由于接口的这个特性,就意味着在接口中只能定义抽象的方法而不能有方法体;
 
    这又于类的定义相违背了,这就造成了接口不能扩展类。另外接口还有一个与类不同的地方是接口声明的变量必须是静态变量。
 
    下面语句定义了一个接口:
   public interface interf
   值得注意的是,如果使用了扩展的接口,必须将老接口的方法和新接口的方法全部覆盖掉。
 
   在覆盖方法时方法名和参数都必须和老方法一致,如果只是方法名相同而参数不同那将重载该方法,但不会覆盖该方法。
2 接口
*1*----接口所用的方法都是public abstract 
 注意:在方法名前没有定义public abstract的情况下,默认是public abstract。
*2*----在接口声明方法时,不能使用native,static,final,synchronized,private,protected等修饰符。
*3*----和public类一样,public接口也必须也定义在与接口同名的文件中。
*4*----接口中可以有数据成员,这些成员默认都是public static final。
*5*----一个接口可以继承自另一个接口。
*6*----JAVa中不允许类的多继承,但允许接口的多继承。
*7*----在JAVA中,一个类可以实现多个接口。
*8*----一个类在继承另一个类的同时,可以实现多个接口。
例子:
-----一个类实现多个接口-------
<1>类的方法

类的方法分为两中;
1. 静态方法(也叫做类方法),而静态方法不方法,是一种类;
语法:
static 数据类型 方法名();
在main中调用时;
用这个方法在它的类中的 
类名.方法名();
2.非静态方法(也叫做对象方法或实例方法)
语法:
数据类型 方法名();
在main中调用时;
首先创建这个方法的对象
语法:
类名 对象=new 类名();
对象.方法名();

<2>成员变量:

1.非静态变量(实例变量)
语法:
数据类型 变量名;
2.静态变量(类变量)
语法:
static 数据类型 变量名;

*静态方法和静态变量时属于某一个类,而不属于类的对象
*静态方法和静态变量的引用直接通过类名应用
*在静态方法中不能调用非静态的方法和引用非静态的成员变量,反之,则可以
*可以用类的对象去调用静态的方法

<3>常量的定义

语法:
static final 数据类型 常量名=“”

<4>类的继承

class 类名1 extends 类名2
表示 类名1 
继承  类名2
类名1 是子类
类名2 是父类
<5>覆盖的方法

用super.方法名() 来调用被覆盖的方法
注意:
在用super调用方法时,在super语句前不能有任何语句;

<6>特殊变量this
一个类所有的实例(对象)调用的成员方法在内存中只有一份拷贝,
尽管在内存中可能有多个对象,而数据成员在类的每个对象所在内存中的存在着一份拷贝

0 0
原创粉丝点击