继承中成员变量的关系:
在子类方法中访问一个变量
首先在子类局部范围找
然后在子类成员范围找
最后在父类成员范围找(肯定不能访问到父类局部范围)
如果还是没有就报错。
class Fu
{
int num = 10000;
}
class Zi extends Fu
{
int num = 100;//子类的成员变量,覆盖了父类中同名的成员变量
*多态中的转型
向上转型(隐式的,自动的):
一个"父类"类型的变量,存储"子类对象"的引用;
Fu f = new Zi();//向上转型;
向下转型(显示的,强制转换):
如果我们确定一个"父类"类型的变量,存储了某个具体的"子类对象"的引用。
我们可以将这个"父类类型"强制转换为它所存储的"子类类型";
Zi z = (Zi)f;
*抽象类
抽象类特点:
抽象类和抽象方法必须用abstract关键字修饰
格式:
abstract class 类名 {}
public abstract void eat();
抽象类不一定有抽象方法,有抽象方法的类一定是抽象类
抽象类不能实例化
那么,抽象类如何实例化呢?
按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。
抽象类的子类
要么是抽象类
要么重写抽象类中的所有抽象方法
成员变量:
只能是常量
默认修饰符 public static final
构造方法
没有,因为接口主要是扩展功能的,而没有具体存在
成员方法
只能是抽象方法
默认修饰符 public abstract
--------------------------------------------------------------------------
*类与类,类与接口以及接口与接口的关系:
---------------------------------------------------------------------------
*类和类之间的关系:
1."is a"(是一个):常见的就是"继承";
2."has a"(有一个):
3."组成关系":一个类中没有"自有成员",全部都是其它的"类类型",由其它"类"组成的;
class CPU{}
class 硬盘{}
class 主板{}
.....
//"电脑"类全部都是由其它"类"组成
class 电脑{
CPU cpu;
硬盘 yp;
主板 zb;
....
}
4."依赖关系(关联关系)":
class 学生{}
class 老师{}