Java引用类型有两个类型:一个是编译时类型,另一个是运行时类型。编译时类型由声明该变量时使用的类型,运行时类型有实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓多态。
public class BaseClass {
public int book = 6;
public void base() {
System.out.println("父类中的普通方法");
}
public void text() {
System.out.println("父类中被覆盖的方法");
}
}public class subClass extends BaseClass{
public String book ="java";
public void text() {
System.out.println("子类中覆盖父类的方法");
}
public void sub() {
System.out.println("子类中的普通方法");
}
public static void main(String[] args) {
//下面编译时类型和运行时类型完全一样,所以不存在多态
BaseClass bc = new BaseClass();
System.out.println(bc.book);
//下面两次调用的是BaseClass的方法
bc.text();
bc.base();
subClass sc = new subClass();
System.out.println(sc.book);
//下面调用的是subClass类的方法
sc.sub();
sc.text();
//下面编译时类型与运行时类型是不一样的,就是所谓的多态
BaseClass bs = new subClass();
System.out.println(bs.book);
bs.text();
bs.base();
//bs.sub();
//bs是父类的类型,他访问的是父类的shi'li'bian'liang
}
}上面程序的main()方法中创造了三个变量,前两个引用变量,他们的编译时类型和运行时类型完全相同,因此调用他们的成员变量和 成员方法非常正常,但是第三个变量的编译时类型和运行时类型不一致,当调用这个引用变量的text方法是,父类中定义了该方法,子类中将这个方法覆盖掉,实际执行的方法是子类中覆盖掉父类的方法。
Java允许将一个子类对象直接赋给一个父类的引用变量,无需任何的类型转换,或者被称为向上转型,向上转型有系统自动完成。
当运行时调用该引用变量的方法时,其方法行为总是表现出子类的行为特征,而不是父类的行为特征,这就可能出现:相同类型的变量‘调用同一个方法是呈现出不同的行为特征,而不是父类的行为特征,这就是多态。
与方法不同的是,对象的实例变量则不具备多态性。
结果: 6 父类中被覆盖的方法 父类中的普通方法 java 子类中的普通方法 子类中覆盖父类的方法 6 子类中覆盖父类的方法 父类中的普通方法
立即学习“Java免费学习笔记(深入)”;
同徽B2B电子商务软件是国内第一个基于J2EE架构的电子商务商业程序,在国内同类软件中市场占有率位居第一。目前客户分布二十多个省份,三十几个行业,直接和间接服务500万企业,其中包括多家部级单位和世界500强企业:商务部、农业部、德赛集团、宝钢集团、江苏龙华集团、深圳中农股份、中集集团等。 。 网站参数管理运营商可对整个网站进行灵活的配置,适应不同的运营需求网站更新将信息生成静态页面,加快浏览速
0
立即学习“Java免费学习笔记(深入)”;
立即学习“Java免费学习笔记(深入)”;
以上就是对于Java中多态的补充的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号