JAVA中的类
1. 基本点
不同于基本类型变量,类作为方法的参数和返回类型时,都是以引用来传递的。这些引用时指向对象的一个实例。
对象数组:类名称 对象数组名称[]
声明变量数组时,一律将中括号放在数组名称的后面!
2. 类中类(嵌套类)
2.1在外面定义的类称为外部类,嵌套在里面的类称为内部类,内部类作为外部类的一个成员而存在。在外部类中,可以随意的访问内部类的属性和方法,包括private声明的属性和方法。对于内部类也是一样,外部类完全不受访问权限的限制,可以任意访问它们。
2.2 内部类访问外部类可以直接访问,前面不需要加任何东西;但是外部类访问内部类的属性和方法时,前面需要加上内部对象的名称。这是因为内部类可能有多个,对于外部类来说,需要区分,而对于内部类而言,外部类只有一个,所以就不需要加东西了。
2.3 static 静态方法,当JAVA中的主程序是个静态方法,静态方法是不能够调用任何动态内容的,这时若在主程序所在的类中定义内部类,内部类名前应加static关键字。
2.4 对于外部类中public修饰的属性和方法,从外部可以直接访问到。对于内部类,必须是publc类型的内部类对象中public类型的属性和方法,才能从外部可以直接访问到。即只有公有成员的内部类的公共成员才能直接从外部访问。
3. 抽象类
3.1 两个特征
(1)可以包含抽象方法—只有声明没有具体实现的方法
(2)不可以创建对象,只能被其它类继承,或者声明对象变量(多态)
3.2 抽象类与普通类的区别
(1)class 关键字前加上了abstract修饰符
(2)访问权限必须是public或者protected,不能是private
(3)包含抽象方法:方法返回值类型前加abstract修饰符
(4)只有方法的声明,没有具体的实现。
(5)继承,继承抽象类的子类本身不是抽象类时,必须实现父类的全部抽象方法(强制性)
3.3 应用场合:多态
为了使方法更加通用,能够适用于所有的子类,方法的参数使用父类类型,这里将父类定义为了抽象类。这么做的好处是简化程序,接口的统一。
抽象类让我们把子类中名称相同但实现不同的方法抽象出来,放到父类当中,使得所有的子类拥有了统一的外部接口,同时它们还可以拥有个性化的实现。
4. 接口
4.1 接口中包括了抽象方法和常量。有以下的限制
(1)接口中只能定义常量;
(2)接口中只能定义抽象方法;即每一个方法返回值类型前加abstract修饰符
(3)抽象方法访问权限只能是public,不能是protected, private等。
4.2 一个类可以实现多个接口,任何实现接口的普通类都必须实现接口的所有方法。只有抽象类或者接口可以保留未被实现的抽象方法。
4.3 接口的多重继承
extends关键字 来扩展接口,接口的继承支持多重继承。
Interface 子接口名称 extends 父接口名称1[, 父接口名称2..]{
}
接口多重继承冲突:
子接口继承的两个父接口出现了值不相同、但名称相同的常量定义;
子接口继承的两个父接口出现了方法的名称、参数完全相同,但是返回值类型不同的方法;
菱形继承问题:出现在C++中,原理是A =>B 与 C => D,在B,C类中分别覆盖了父类A的某个方法,当D继承B与C(多重继承)时,D中的那个方法不知如何选取。
JAVA中为了避免菱形继承问题,只允许单继承。
4.4 抽象类和接口不能用来创建对象,但是我们可以用它们来声明对象变量或数组,也可以让方法返回抽象类类型或者接口类型。