您的位置:首页 > 编程语言 > Java开发

java笔记总结_03_数组、继承和多态

2011-07-24 17:33 399 查看
第四章 数组

1、什么是数组

一个数组就是一个用来存储一系列变量值的命名区域。数组也是变量,它存储的是相同数据类型的一组数据。

2、如何使用数组

声明数组

数据类型 数组名 [];

数据类型 [] 数组名;

数组定义,分配数组内存空间

数组名 = new 数据类型 [大小];

数据类型 [] 变量名 = new 数据类型[数组的长度]

给数组元素赋值

数组定义好后,数组中每个元素都有默认值

方法一:边声明边赋值

方法二:动态地从键盘输入信息工赋值

处理数据

数组排序:Arrays.sort(数组名);

数组复制:arraycopy();

获取数组个数:用属性length

3、多维数组

声明:数据类型 [][] 变量名;

定义:数组变量名 = new 数据类型[第一维数][第二维数]

数组变量名 = new 数据类型[第一维数][]

第六章 继承和多态

4、继承

继承就是将父亲的东西继承过来。

继承要求:两者之间要有一定的层次关系,并且有可传递性,可用is-a 判断。

继承的特点:子类继承了父类的所有属性和方法(但不包括构造方法和私有方法或属性),并且可以为自己增添新的属性和方法。Java只支持单继承。

继承的优点:提高代码的可重用性。

继承关键字:extends

继承后,子类的对象可以调用父类的方法和属性,相当于子类也有了这些属性和方法

当存在继承关系时,创建子类对象时,会先执行父类的构造方法。

5、super关键字

只能出现在有继承关系的子类中,表示对父类对象的引用

显示调用父类的构造方法:在子类构造方法的第一行(必须)用super可显示调用父类构造方法。

显示调用父类的普通方法

在子类的非静态方法中可以通过super来调用父类的属性。

子类中调用构造方法创建对象时,首先会调用父类的构造方法对父类的属性进行初始化。如果没有显示调用父类的构造方法,则默认调用父类的默认构造方法。如果父类中已经创建了有参的显示构造方法,且又没有声明无参构造方法,此时子类中没有显示调用父类中有参的构造方法,则会在编译时报错。

6、访问修饰符

用来修饰类、方法、成员变量

public 公有的:一切皆可见

private 私有有:本类可见

protected 受保护的:对本类、所有子类和本包可见

默认(不加任何访问修饰符时):本类、本包可见(包外的子类也不可访问)

类只能用public 或默认访问修饰

7、方法重写

发生在子父类之间的两个方法,重写方法出现在子类中。

定义:子类重写方法和父类中被重写的方法具有相同的名称、返回值类型和形参列表。

目的是:对父类的某个方法的实现不满意或不能满足要求时使用重写,同时也是为了实现多态。

注意:方法重写不能使用比被重写方法更严格的访问权限。

重新定义的返回值类型必须是父类同一方法返回值类型的子类型,并且无法重写static 或final 方法。

8、Object类

它是JavaSE API中提供的一个类,全名java.lang.Object

是所有Java类的根类

如果一个类未明确使用extends 关键字指定父类,则默认为继承自Object类。

Object 类的几个重要方法:toString()、 equals(Object obj)、 hashCode()

9、static关键字

修饰成员变量、成员方法。被修饰的成员会被类的所有实例所共享。

static修饰的成员变量通常叫静态变量或类变量,static修饰的成员方法通常叫静态方法或类方法。

静态变量:

类中的静态变量属于类,而不属于某个特定的对象

类的静态成员可以与类的名称一起使用,而无须创建类的对象

不管创建了类的多少示例,整个类中静态变量的副本就只有一个

引用静态变量时建议使用类名来调用

声明为static 的变量实质上就是全局变量

静态方法:

类的静态方法只能访问其他静态成员,不能访问非静态成员。

类的静态方法不能使用this和super关键字。

静态方法不能被覆盖(重写)为非静态方法。

静态代码块:

如果需要通过计算来初始化静态变量,可以声明一个静态块。

静态代码块仅在该类被加载时执行一次。

只能初始化类的静态数据成员。

10、final关键字

final修饰符可修饰类、方法、变量。final表示不可变的。

final类:

final修饰的类不能被继承。

final方法:

final方法不能被覆盖

一个final方法只能被实现一次

如果一个类是final类,那么它的所有方法都final方法

final变量:

final变量只能被安初始化一次,其值不能修改。

其实,final变量就是一个常量。

11、多态

多态就是具有表现多种状态能力的特征。

对象多态性:

向上转型:子类实例可以直接当作父类实例使用。此时子类的特有成员不能被访问。

向下转型:父类实例不能直接当作子类实例使用。需要强制类型转换。

instanceof 可差别对象是属于某个类

方法多态性:

Java中所有非静态方法都具有多态性。

动态绑定:

在执行期(而不是编译期)判断变量所引用的实例的实际类型,根据其实际的类型调用其相应的方法。注意:一个父类对象不可以访问其子类新增加的成员。

使用多态方法可以提供代码的可维护性和可扩展性。

发生多态的条件:

要有继承

要有重写

要有向上转型

父类变量调用被子类重写的方法

12、abstract关键字

用来修饰类和方法(不包括构造方法和静态方法)。

被abstract 修饰的类和方法分别叫抽象类和抽象方法。抽象方法没有方法体,只有方法签名,即没有普通方法所用的“{}”。含有抽象方法的类必须是抽象类,但抽象类中的方法不一定全是抽象方法。抽象类不能被实例化,做成抽象类是为了让子类继承的,但抽象类可以定义类变量,不过只能指向已经实现抽象方法的子类。

抽象方法必须有构造方法,因为抽象类是要被子类继承的,而继承时,子类创建对象时,首先是要调用父类的构造方法,所以,抽象类也要有构造方法,但是不可以用来创建对象。

如果子类也不实现或不完全实现父类中的抽象方法,可以把子类也定义为abstract 的。

13、接口

接口是特殊的抽象类,就是一套规范(功能)的说明,它没有具体的实现,也不能被实例化,具体实现要由子类实现。

接口中的方法默认是 public abstract 的

接口中的变量默认是 public static final 的

一个类可以实现多个接口(implements),但必须实现接口的所有方法,否则该类必须声明为抽象类。

一个接口可以继承自多个接口(extends),一个类可实现多个接口。

在实现类中对于接口的变量可以直接采用 接口名.变量名 进行访问

14、抽象类和接口的区别

属性:

抽象类定义的属性没有任何限制,与普通类中定义的变量一样。

接口中定义的属性是public static final 的,相当于常量。

方法:

抽象类定义的抽象方法需要abstract 声明,而且没有方法体。

接口中定义的方法无需任何修饰便是public abstract 的,同样也没有方法体

实现方式:

抽象类中定义的抽象方法需要子类来实现

接口中的方法通过implements 的类或继承接口的接口来实现。

构造方法:

接口中没有构造方法,而抽象类中有。

类中成员设置:

抽象类可以有抽象方法,具体实现方法、变量、常量

接口中只存在方法的声明和常量。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: