java重写父类
A. java子类重写父类带泛型的方法
特殊变量
* 使用特殊变量super提供对父类的访问
* 可以使用super访问父类被子类隐藏的变量或覆盖的方法
* 每个子类构造方法的第一条语句都是隐含的调用super,如果父类没有这种形式的构造函数就会报错.
code:
class Animal
{
int height,weight;
Animal()
{
System.out.println("Animal construct");
}
void eat()
{
System.out.println("Animal eat!");
}
void sleep()
{
System.out.println("Animal sleep!");
}
void breathe()
{
System.out.println("Animal breathe!");
}
}
class Fish extends Animal
{
Fish()
{
System.out.println("Fish construct");
}
void breathe() //override method breathe()
{
System.out.println("Fish bubble");
}
}
class DoMain
{
public static void main(String[] args)
{
//Animal an=new Animal();
Fish fn=new Fish();
//an.breathe();
//fn.breathe();
//fn.height=30;
//fn.weight=20;
}
}
输出结果:
F:\Java Develop>javac Animal.java
F:\Java Develop>java DoMain
Animal construct
Fish construct
必须重写才能使用搜索
B. 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越来越厉害,顺便也期望我也一样吧,呵呵!!
C. JAVA中子类重写父类的方法,怎么写,什么要求
只要保证子类与父类中方法原型一致、返回类型和访问修饰符不低于父类就行了,不需要任何关键字
public class Base(){
public void print(){
System.out.println("这是Base类的方法!");
}
}
public class Sub extends Base(){
public void print(){
System.out.println("这是Sub类重写后的方法!");
}
}
D. java中子类重写父类方法后能在子类的对象中使用父类的方法吗如果能,怎么使用
可以使用super调用,具体代码:
classParent{
publicvoidprint(){
System.out.println("Parent");
}
}
classChildextendsParent{
@Override
publicvoidprint(){
//调用父类print
super.print();
System.out.println("Child");
}
}
publicclassApp04{
publicstaticvoidmain(String[]args){
Childc=newChild();
c.print();
}
}
执行结果:
E. JAVA继承,子类覆盖重写父类方法
抽象方法你是怎么直接new出来的
F. 在java中子类怎么重写父类带的方法(用到父类的属性)
子类继承父类之后只能重写父类中的protected和public方法,默认没有修饰词的是friendly,同样可以重写,但是private方法就不能重写,即使子类中的方法名和父类的private方法一致,也只能看做是一个新的方法,而不是重写。
override也就是重写,覆写
G. java中子类重写(覆盖)父类是什么意思直接删除父类吗
class A { //父类A
public void print(String s) { //父类带参数的方法
System.out.println(s);
}
A () { //父类构造方法
print("父类构造方法A()");
}
public void f() { //父类无参方法
print("父类无参方法f()");
}
}
public class B extends A{ //子类
B() {
//Super();相当于省略了这一句话 调用了父类里的无参构造方法
print("B()");
}
public void f() { //子类重写父类方法
print("B:f()");
}
public static void main(String[] args) {
B b = new B();
b.f();
/*最后输出A();B();B:f();
* 分析:先从主方法开始 实例化对象 b 因为B子类继承了父类A B没有使用Super关键字
* 所以B的构造方法也调用了A的无参构造方法 也就是父类里的A()
* 所以会先打印出A() 然后再打印出B构造方法 里的东西B()
* 最后对象引用 b.f() 调用了B的f()方法 重写了父类的B的f() 所以最后打印出B:f()
*/
}
}
H. java中关于重写父类方法的问题
我来解答吧。首先,两个对象是否相同主要是比较两个对象的hashcode是否相同的,equals方法就是通过比较hashcode来判断两个对象是否相同的。hashset有元素不能重复的特性,我想它内部实现应该是在你往里添加元素时,他就会调用equals方法来逐个比较,看他们的hashcode是否相同,相同就重复了。这并不矛盾!!!
关于tostring方法,打印对象就是打印tostring的内容,不要问为什么,就是这样。
I. java重写能重写父类的成员变量吗
重写和重载是针对方法的
子类的变量可以覆盖父类的变量,但是不能改变父类的变量