一、强制类型转换
1.1、真爹变儿,不允许
1.2、假爹变儿/儿变爹,都满足如下三条:
1.2.1、共有方法、属性(重写):以子(重写后的)为准 1.2.2、子特有方法、属性:不可通过father。操作 1.2.3、父特有方法、属性:因为儿子变爹了,可以以son。操作
二、多态
2.1 、定义格式:父类类型 变量名=new 子类类型(); 满足如下三条:
2.1.1、共有方法、属性(重写):以子(重写后的)为准 2.1.2、子特有方法、属性:不可通过father。操作 2.1.3、父特有方法、属性:以father.调用
2.2、关于多态:https://blog.csdn.net/chenssy/article/details/12786385
关于重写和重载:https://www.runoob.com/java/java-override-overload.html
public class Test01 {
public static void main(String[] args) {
/**
* 真爹 强转 子:NG
* 真爹 不可能装 儿子
*
Father father = new Father();
Son son = (Father)father;//java: 不兼容的类型: Father无法转换为Son
*/
/**
* 假爹 强转 子,OK
* 1、共有方法、属性(重写):以子(重写后的)为准
* 2、子特有方法、属性:不可通过father。操作
* 3、父特有方法、属性:可以以son。操作
*
Father father = new Son();
Son son = (Son)father;//可以
son.f();//f
son.s();//s
son.age();//s-age
son.ren();//ren
father.f();//f
father.s();//java: 找不到符号、 符号: 方法 s()、位置: 类型为Father的变量 father
father.age();//s-age
father.ren();//ren
System.out.println(father.f);//2
System.out.println(father.s);//java: 找不到符号、符号: 变量 s、位置: 类型为Father的变量 f
System.out.println(son.f);//2
System.out.println(son.s);//1
*/
/**
* 子 转 爹,OK
* 1、共有方法、属性(重写):以子(重写后的)为准
* 2、子特有方法、属性:不可通过father。操作
* 3、父特有方法、属性:因为儿子变爹了,可以以son。操作
Son son = new Son();
Father father = (Father)son;//可以
father.f();//f
father.s();//java: 找不到符号、符号: 方法 s() 、位置类型为Father的变量 father
father.age();//s-age//此处小心,结果是s-age而不是f-age,由儿子强转的爹也终究是儿子
father.ren();//ren
son.f();//f
son.s();//s
son.age();//s-age
son.ren();//ren
System.out.println(father.f);//2
System.out.println(father.s);//java: 找不到符号、符号: 变量 s、位置: 类型为Father的变量 f
System.out.println(son.f);//2
System.out.println(son.s);//1
*/
/**
* 多态
* 1、共有方法、属性(重写):以子(重写后的)为准
* 2、子特有方法、属性:不可通过father。操作
* 3、父特有方法、属性:以father.调用
Father father = new Son();
father.f();//f
father.s();//java: 找不到符号、符号: 方法 s() 、位置类型为Father的变量 father
father.age();//s-age//此处小心,结果是s-age而不是f-age,由儿子强转的爹也终究是儿子
father.ren();//ren
System.out.println(father.f);//2
System.out.println(father.s);//java: 找不到符号、符号: 变量 s、位置: 类型为Father的变量 f
*/
}
}
class Father{
int f = 2;
public void f(){System.out.println("f"); }
public void age(){System.out.println("f-age");}
public void ren(){System.out.println("ren");}
}
class Son extends Father{
int s = 1;
public void s(){System.out.println("s"); }
public void age(){System.out.println("s-age");}
public void ren(){System.out.println("ren");}
}