package Husky.JAVA.opp.Demo03;
public class A {
public static void main(String[] args) {
//父(高) 子(低)
People s=new Americas();
//s.eat(); People没有eat方法
//高------------------------->低 不需要强转
//将People转化为Americas,就可以使用Americas里的eat方法
Americas S=(Americas)s;
S.eat();
((Americas) s).eat();//写成一句话
}
}
/*
1.父类引用指向子类的对象
2.把子类转换成父类,向上转型
3.把父类转换成子类,想下转型
4.方便方法的调用,减少重复的代码
*/
package Husky.JAVA.opp.Demo03;
public class People {
public void run(){
System.out.println("People run");
}
}
package Husky.JAVA.opp.Demo03;
public class Chinese extends People {
public void run(){
System.out.println("Chinese run");
}
public void Study(){
System.out.println("Chinese Study");
}
}
/*
一个对象的实际类型是确定的
可以指向的引用类型不确定,父类的引用指向子类
Chinese s1 = new Chinese();
People s2 = new Chinese();//子类重写的父类的方法,调用子类的方法
s1.run();
s2.run();
((Chinese) s2).Study();//强转
s2.Study(); 父类指向子类,但不能调用子类独有的方法
package Husky.JAVA.opp.Demo03;
public class Americas extends People{
public void eat(){
System.out.println("Americas eat");
}
}