package test;
/*
* 1、子类转化成父类
* 子类可以自动转型成父类
* (1)如果子类对父类的方法有覆写,并且子类的实例赋值给父类的引用,通过这个引用来
* 调用这个覆写的方法的时候,调用的是子类的
* (2)父类的引用不能调用子类的特有方法和属性
* (3)如果父子类有同名的属性,那么父类指向子类的实例的引用调用这个属性的时候调用的还是父类的
* 2、父类转化成子类
* 父类转换成子类不能自动完成。
* 抽象类作为父类同样符合
* 接口中符合,但注意接口中没有属性
*/
class Teacher{
String name = "战哥";
int age;
public void teach() {
System.out.println(name+"在教课");
}
}
class JavaTeacher extends Teacher{
boolean isGlass;
String name = "大战哥";
public void teach() {
System.out.println(name+"在教java课");
}
public void playBall() {
System.out.println(name+"在打篮球");
}
}
class PHPTeacher extends Teacher{
public void teach() {
System.out.println(name+"在教PHP");
}
}
public class Demo1{
public static void main(String[] args) {
//子类自动转换成父类
Teacher jt = new JavaTeacher();
//jt.name = "战哥";
//如果子类对父类的方法有覆写,并且子类的实例赋值给父类的引用,通过这个引用来
//调用这个歌覆写的方法的时候,调用的是子类的
jt.teach();
//父类的引用不能调用子类的特有方法和属性
//jt.playBall();调用失败
//jt.isGlass = true;调用失败
System.out.println(jt.name);
Teacher t = new JavaTeacher();
//Teacher t = new Teacher();//不能转换成子类,如果想转换成子类必须new 子类()
JavaTeacher jt1 = (JavaTeacher)t; //把真身是javaTeacher的父类转回JavaTeacher子类,可以访问子类内部发方法和属性
Teacher t1 = new PHPTeacher();
//不能转换,如果这个父类的真身是子类B,不能转换成子类A
JavaTeacher jt2 = (JavaTeacher)t;
}
}