您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

对于Java中多态的补充

2025/10/3 13:14:16发布9次查看
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代码时,引用变量只能调用声明该变量时所用类中的方法。
通过引用类型变量来访问其包含的实例变量时,系统总是试图访问定义该变量的编译时类型所定义的实例变量,而不是它运行时所定义的实例变量。以上就是对于java中多态的补充的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product