public class Person {
String country = "Person country is undefined.";
String language = "Person language is unkown.";
void printCountry() {
System.out.println("Person类printCountry()中的country为:"+country);
}
void printLanguage() {
System.out.println("Person类printLanguage()中的language为:"+language);
}
}
class Chinese extends Person {
int country = 1;
// String language = "中国话";
@Override
void printCountry() {
System.out.println("printCountry() 子类使用super关键字访问父类中的printCountry方法变量");
super.printCountry();//用super关键字访问Person的printCountry方法
System.out.println("printCountry() Chinese类中的country为:"+country);
}
void print() {
System.out.println("print() 使用super关键字访问父类中的country变量为:"+super.country);//用super关键字访问Person的country成员变量
}
}
public static void main(String[] args) {
Chinese lisi = new Chinese();//子类对象
lisi.printCountry();//子类覆盖|重写父类的办法
lisi.print();//子类独有的办法
lisi.printLanguage();//子类没有覆盖父类的printLanguage(),那么这样调用就是直接调用子类继承父类的办法
# 父类的值是country is undefined 由于子类也有一个变量跟父类同名(int country = 1)
# 那么对象是子类值就是子类的,对象是父类,这个变量的值也是父类的值
# 如果子类没有跟父类同名的变量,那么值就是父类的,虽然对象是子类,但是继承关系,
# 它不但继承了办法还继承了变量
System.out.println(lisi.country);//输出结果1
System.out.println(lisi.language);//子类没有覆盖父类的language变量,那么输出的还是父类的language的值
System.out.println("*****************");
System.out.println("");
Person person = lisi;//这里是向上转型,person是上转型对象,向上转型都会成功,即是安全的
# 由于这里的对象是父类,子类私有的对象对于父类是不可见的 不能用
person.print();//报错
person.printCountry();//向上转型对象访问重写的方法量
person.printLanguage();//向上转型对象访问继承的方法
System.out.println("person.country="+person.country);//向上转型对象访问隐藏的成员变量
System.out.println("person.language="+person.language);//向上转型对象访问继承的成员变量
System.out.println("*****************");
System.out.println("");
lisi = (Chinese) person;//这里是向下转型,此处是安全的
lisi.printCountry();
lisi.printLanguage();
# 虽然一开始是父类对象 ,但是可以转型成子类对象,子类对象当然可以调用自己的办法
lisi.print();//正确
System.out.println(lisi.country);
System.out.println(lisi.language);
# 父类对象向下转型成子类对象 编译时报错java.lang.ClassCastException
Person person = new Person();//子类对象
Chinese lisi = (Chinese) person;//这里是向下转型,运行不报错,编译出错
lisi.print();//有问题的编译时
# 因此想向下转型 必须是子类创建 向上转型成父类,再有这个父类(通过向上转型来的)再向下转型成子类
# 这样就不出错了
}
向下转型的意义
非常有意义
https://blog.csdn.net/helpluozhao123/article/details/117765890
版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!
常见资源合集和破解beqptwpmc...