java扫盲篇之二

来源:互联网 发布:流量测试和数据分析 编辑:程序博客网 时间:2024/04/28 04:47

第三章:类和继承

面向对象(Object Oriented)
类:在java中,类是一种重要的复合数据类型,是组成java程序的基本要素,也是面向对象的程序设计的基本单位。类定义了某类对象的共有变量和方法。
变量:变量是现实对象的属性或状态的数字化表示。为了便于理解,我拿桌子作为对象来说,桌子的长、宽、高是它的属性,即java中的变量;
方法:对现实对象进行的某种操作或其对外表现的某种行为。
对象:由一组相关的变量和方法共同组成的一个具体的软件体。类实例化就成为对象。类和对象的关系可以比喻为设计图纸和房子的关系。


类声明:
[public] [abstract|final] class classname [extends superClassName][implements interfaceNameList...]
{...class body...}
public :所有其他类都可以访问它;省略public时则为package可见性,即只有位于同一个包中的类可以访问它。
abstract:抽象类,该类需要被继承,才能实例化。final阻止一个类被继承。
extends:类继承,如果在类定义时没有指定类继承关系,Java将自动从Object类派生该类。
implements:实现接口,java类只可继承一个父类,但可同时实现多个接口。
类成员:
类体是一个类的功能部分,有变量和方法组成,统称为类成员。
类成员的访问级别:public protect package private.用来控制其他类对当前类的访问。
类变量分为类成员变量和局部变量。类成员变量定义在所有的方法之外,而定义在方法中的变量为局部变量。例如:
public class MyClass {
int x;  //x是类成员变量
public void print() {
int y=0;
int z;  //y和z是局部变量
system.out.println("x= "+x);
...
}
}
    方法:两种,构建器(constructor)和普通方法。和C++一样,构建器在新建对象时被调用,它没有返回类型。普通方法都有返回类型,如果一个普通方法不需要返回任何值,那么必须得在前面带上void。
方法的参数表由成对的类型和参数组成,之间用逗号隔开。如果无参数,则参数表为空。
  方法内部定义的变量名不能与方法的参数同名,否则会产生编译错误。另外注意:如果局部变量与类成员变量同名,则类的成员变量被隐藏。
    关键字this:在一个方法内部,如果局部变量名与类变量名相同,则局部变量隐藏类变量,在这种情况下,要想访问类变量,则必须使用this关键字。
   方法重载:多个具有相同名称的方法,其参数的个数或类型不同,则构成方法重载。
   类继承:也称为派生(derived),继承出的类称为原来类的子类,而原来类被称为父类或超类。类的继承具有传递性。
           所有的类均从一个根类Object中派生出来,也就是说除Object之外的任何类都有一个直接超类。如果一个类在声明时未指定其直接超类,那么默认即为Object。
   面向对象特性:
   封装性:一个类把私有成分封装起来,其保护接口和公共接口提供给其他类使用,这种结构体现了类的封装性。protect(能被子类继承和使用,包括不同包的子类)。private、public。类中不加任何权限限定,则默认为
    default,这些成员可以被这个类本身和同一个包中的类所访问。
    继承性:面向对象最强大的功能是类的继承,继承允许你在一个已经存在的类之上编写新的程序。子类中不能继承父类中private的变量和方法,但可以重写父类的方法,即可以命名与父类同名的方法。
    Java由继承引出“多态”的概念:方法的多态和类型的多态。(1)方法的多态:一个类中方法的重载(overload),有的书上也叫方法的覆盖(override),即是一种多态的形式。


  成员变量的隐藏和方法的重写:
  子类通过隐藏父类的成员变量和重写父类的方法,可以把父类的状态和行为改变为自身的状态和行为,举例如下:
class A {
int x;
void setX(){
x=0;
   }
}
class B extends A{
int x; //隐藏了父类的变量x
void setX(){   //重写了父类的方法setX()
x=5;
   }

注意:子类中重写的方法和父类中被重写的方法名称要有相同的名称、参数表以及返回类型,只是方法体不同。
super的3种使用情况:
1、访问父类被隐藏的变量,如super.variable;
2、调用父类中被重写的方法,super.method([paramlist]);
3、调用父类的构建器,如super([paramlist]);
在java中,this通常指当前对象,super则指父类。


关键字:static
用static声明类变量和类方法的格式:
static variableType variableName;
static renturnType classMethod([paramlist]){...}
1、类变量或类方法统称为静态对象。类变量可以通过类名直接访问,无须先生成一个实例对象,也可以通过实例对象访问类变量。类方法不能访问实例变量,只能访问类变量。
2、调用静态方法的格式:类名.方法名
3、如果在声明时不用static关键字修饰变量或方法,则表示是实例变量或实例方法。
4、每个对象的实例变量都独立分配内存,通过对象来访问这些实例变量。实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。
5、static 也可以修饰一个类,称为静态类。通常只有内部类才允许声明为静态的。
关键字:final
1、方法被声明为final,表示这个方法不需要进行扩展(继承),也不允许任何子类覆盖这个方法,但是可以继承这个方法。
2、final类与普通类的使用几乎没有差别,只是它失去了被继承的特性。
对象复制:
Object.clone()  实现对象复制。protected方法。
要使得一个类的对象有复制能力,必须显示的定义clone()方法,并且该类必须实现Cloneable接口。如果没有实现该接口,则在运行时会抛出一个CloneNotSupportedException异常。
内部类:
顾名思义,类内部定义的类,也称嵌套类。可以定义在一个类里面,也可以定义在一个方法里面,甚至可以定义在一个表达式中。
内部类它可以毫无限制的访问相对于它的外部类的变量和方法,包括private成员。

原创粉丝点击