⑴ java 子类继承父类 可以直接调用父类属性和方法 为什么还要用多态
举个例子:
父类:A
子类:A1
子类:A2
父类中定义了一个方法method:,类A1和类A2有不同的实现,这是代码中定义一个类A,那么可以直接调用A的a方法即可,不用关心用A1还是A2去实例化的这个A对象,这就是多态的特性
A a;
a = new A1();或a = new A2();
a.method();只要改变这个a的实例化方式,就能执行不同对象的方法。
⑵ JAVA中,子类将继承父类的所有属性和方法么~为什么
是的,子类将继承父类的非私有的属性和方法。
在JAVA中,子类继承父类的所有方法和属性(构造方法要用关键super([参数])调用);继承是JAVA中一个重要的特色,便于程序的编写,提高代码的重用性。
1、如果给子类i提供get和set通过get调用的自然是子类的。
2、如果给父类和子类分别提供get和set,调的仍然是子类的,因为方法被重写。
(2)java调用父类属性扩展阅读
在继承中用到super调用父类的构造
privateStringname;
privateStringsex;
publicxinxin1(Stringname,Stringsex)
{
this.name=name;
this.sex=sex;
}
publicvoidhello(){
System.out.println(“嗨!我是”+name+”我是”+sex+”孩”);
}
⑶ java中重写方法中调用父类的属性
哥们你看好了,我和你一样也是初学者,你的问题,也是前几天我的问题;
这玩意我在Java群里面也问过,搞了十年Java的也说不出个123来还动用了什么debug测试工具,当然这个玩意以后我们也会用到!
我告诉你步骤怎么回事:
当你newY的时候,注意,还没有产生对象的时候,就执行了一个动作就是加载CLASS文件这个动作!
class文件已加载,就开始动用分配内存的动作,懂??
3.此时分配的对象有,方法区,父类方法,和子类方法:(这里说的覆盖其实只是就近原则而已,其实没有覆盖如果你不理解,你可以看看Java内存分析)
4.还分配了成员变量,在堆里面分配,注意:(堆内存,分配了子类和父类变量其实都有的,是划分开的切记:两个类里面的i都给划分了空间)
5.此时堆内存的所有变量,都是默认值,int就是0;这个步骤称为:隐式初始化!以上是加载class后就发生的动作懂了?
6.然后子类继承了父类,父类动作必然先执行父类里面的构造函数,开始执行初始化动作
(注意:构造函数是用来初始化动作的,能给本类对象初始化,也能给子类对象初始化切记!)
7.父类,启用构造函数先把自己的i=2给赋值完毕(显示初始化动作);
就开始执行构造函数里面的其他语句;这里就是你写的那个方法display();
父类读这个方法的时候,回去方法区里面找方法,他优先找子类,如果子类没有,在找他自己的,此刻子类是有的,也称之为覆盖
(说明一下,其实父类方法也在的)
8.此刻调用的子类方法,子类里面调用了i,(此时父类的i已经是2了,但是子类i还是0,懂了?但是方法找变量的时候会优先找子类懂了?当然k也是0了)
9.父类读完你这个调用以后就会把子类所有的成员变量初始化完成,称之为(显示初始化动作,就是我们能看的见的数字)
10.如果你在new完成以后,你在调用,你会发现,都是有值的了!
11.补充下:哥们纯手工靠记忆敲打出来的;
这个是我个人纠结了好几天以后总结的,总结的不到位还请指点,有大佬指引我,遇见这问题可以先记起来,以后学到多线程,很容易就可以理解!
祝你Java越来越厉害,顺便也期望我也一样吧,呵呵!!