Java中的属性覆盖 向上转型之后调用子类的变量(与父类中变量同名) 方法的问题

您所在的位置:网站首页 java父类属性会被子类属性覆盖吗 Java中的属性覆盖 向上转型之后调用子类的变量(与父类中变量同名) 方法的问题

Java中的属性覆盖 向上转型之后调用子类的变量(与父类中变量同名) 方法的问题

2024-06-07 01:41| 来源: 网络整理| 查看: 265

先上代码

public class Son extends Father { public int i = 100; public void show() { System.out.println("子类 方法!!!"); } public static void main(String[] args) { Father son = new Son(); son.show(); System.out.println(son.i); } } class Father { public int i = 50; public void show() { System.out.println("父类方法!"); } }

猜想一下运行结果。。。。。。。。。。。

说明 创建父类对象实现的时候用子类实现,此时这个对象的属性为父类的属性,不被子类覆盖。但如果子类实现的时候调用重写的方法,则父类的方法会被覆盖。

总结:方法可重写,属性不可重写。父类的方法被子类覆盖,父类的属性不被子类覆盖。 

直到看了一个大神的博客:https://blog.csdn.net/kavensu/article/details/8079460

才明白了一些。

先看一个百度的问题 问的蛮好的 解释的更好问题(点击问题进行查看) class Father{ String name="父"; void f(){System.out.print("父类");} } class Son extends Father{ String name = "儿子"; void f(){System.out.print("儿子");} void f2(){} } Father s = new Son(); s.name;//1 s.f();//2 s.f2();//3

对于//3   编译是不通过的。记住哦,我们现在创建的是父类的引用指向子类Son的对象。子类中定义的方法f2在父类中不存在,所以用这父类的引用去调用他没有的方法是错误的。

 对于多态,可以总结它为:   一、使用父类类型的引用指向子类的对象;   二、该引用只能调用父类中定义的方法和变量;   三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)   四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3