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