实例化是谁,谁提供成员变量以及属性。谁声明,用谁的变量与函数的范围。
这个可能与对象的实现机制有关,后面扒一扒java底层和jvm应该好理解。
父类就是被继承的那个类,也叫做基类、超类。子类就是继承父类的类。他们之间的关系主要
是以下几点
1.声明表示调用范围。
2. 实例化表示最终的对象类型。
解释如下
父类与子类之间,除了父类实例化的不能强制转换成子类,其他的都可以。比如父类声明子类实例化,可以将父类强制转换成子类,而子类声明子类实例化的也可以强制转化成父类。
对于调用范围一说,看它声明是父类还是子类,父类只能调用父类所包含的属性,但调用的还是实例化对象的。
A为父类 B为子类。
就一个DO函数
public class class1 {
public void DO(){
System.out.println("class1");
}
}
子类重写父类的DO函数
public class class2 extends class1 {
public void DO(){
System.out.println("子类");
}
}
public class main {
public static void main(String[] args) {
//父类声明父类实例化
father father1 =new father();
father1.DO();
//父类声明子类实例化
father father2 =new son();
father2.DO();
//父类声明子类实例化强制转成子类
son son1 =(son) father2;
son1.DO();
//子类声明子类实例化
son son2=new son();
son2.DO();
//子类声明子类实例化
father father3=(father) son2;
father3.DO();
}
}
结果看一下,除了父类声明父类始化输出不同,其他子类实例化的输出都一样。
public class main {
public static void main(String[] args) {
//父类声明父类实例化
father father1 =new father();
//father1.DO();
son son=(son)father1;
son.DO();
}
}
ERROR的,父类实例化不能强制转化成子类的。