如何做自助搜券网站,柳城网站制作,中企动力网站建设 医疗,soho hotel 酒店 wordpress主题7.11 Java方法重写
这里首先要确定的是重写跟属性没有关系#xff0c;重写都是方法的重写#xff0c;与属性无关 带有关键字Static修饰的方法的重写实例 父类实例 package com.baidu.www.oop.demo05;public class B {public static void test(){System.out.println(这…7.11 Java方法重写
这里首先要确定的是重写跟属性没有关系重写都是方法的重写与属性无关 带有关键字Static修饰的方法的重写实例 父类实例 package com.baidu.www.oop.demo05;public class B {public static void test(){System.out.println(这是父类方法的重写);}
}子类实例 package com.baidu.www.oop.demo05;public class A extends B{public static void test(){System.out.println(这是子类方法的重写);}
}主程序实例 package com.baidu.www.oop;import com.baidu.www.oop.demo05.A;
import com.baidu.www.oop.demo05.B;public class Application {public static void main(String[] args) {A a new A();a.test();//父类的引用指向了子类B b new A();b.test();/** 这里new的都是A但是输出结果不同* a.test()调用的是A类中的静态方法* b.test()调用的是B类中的静态方法* A类与B类之间又有继承关系* 有了继承关系在new A()的时候子类是可以指向父类的* 也就是B b new A中父类的引用b可以指向子类* 因为类型之间可以转化* 在这个实例中我们也能看出方法的调用只跟等号左边的类有关* 也就是定义的数据类型有关* 也就是与右边的new A()没有什么关系*/}
}
/*
* 这是子类方法的重写
这是父类方法的重写Process finished with exit code 0*/不带Static关键字的方法的重写 在IDEA中可以使用altinsert快捷键实现快速插入方法的重写如图 选择相应的父类方法可以重写同时在方法上会自动生成一个注解 Override//注解跟注释一样只不过这是一个又功能的注释public void test1() {super.test1();//默认调用父类的方法}
}Override就是重写的意思生成的重写的方法默认的是调用父类的方法。 不带Static关键字修饰的父类实例 package com.baidu.www.oop.demo05;public class B {public static void test(){System.out.println(这是父类static修饰的方法的重写);}public void test1(){System.out.println(这是父类没有static修饰的方法的重写);}}不带Static关键字修饰的子类实例 package com.baidu.www.oop.demo05;public class A extends B{public static void test(){System.out.println(这是子类static修饰的方法的重写);}Overridepublic void test1() {System.out.println(这是子类没有static修饰的方法的重写);}
}不带Static关键字修饰的主程序实例 package com.baidu.www.oop;import com.baidu.www.oop.demo05.A;
import com.baidu.www.oop.demo05.B;public class Application {public static void main(String[] args) {A a new A();a.test();a.test1();//父类的引用指向了子类B b new A();b.test();b.test1();/** 这里new的都是A但是输出结果不同* a.test()调用的是A类中的静态方法* b.test()调用的是B类中的静态方法* A类与B类之间又有继承关系* 有了继承关系在new A()的时候子类是可以指向父类的* 也就是B b new A中父类的引用b可以指向子类* 因为类型之间可以转化* 在这个实例中我们也能看出关键字static修饰的静态方法的调用只跟等号左边的类有关* 也就是定义的数据类型有关就像double i 1;虽然赋值了整型但是数值类型还是double* 也就是与右边的new A()没有什么关系*/}
}
/*
这是子类static修饰的方法的重写
这是子类没有static修饰的方法的重写
这是父类static修饰的方法的重写
这是子类没有static修饰的方法的重写Process finished with exit code 0*/从运行结果可以看出没有Static关键字修饰的方法的重写虽然B b new A()但是用Static关键字修饰的test()方法重写的调用是调用的父类的方法而没有Static关键字修饰的test1()方法则是调用了子类的方法的重写。这里我们就得出一个结论静态方法与非静态方法是有区别的没事的时候不要写一些静态的方法去玩如果是使用了Static修饰的静态方法是与左边的定义类型有关的而么有Static修饰的非静态方法则是与右侧赋值的方法有关这也就是子类重写了父类的方法 这里一定要注意重写只与非静态的方法有关与静态方法没有关系因为静态方法在类加载的时候就已经进入内存。而且重写方法的关键词也必须是public修饰的。 这里我们也看出方法的重写与父类的方法名一模一样只是实现的代码不同与重载不同的是 重载是在同一个类中的而重写则是在父类与子类之间的重载是同一个类中的同一方法名但参数不同而重写则是在不同类中的同一方法只不过实现代码也就是方法体不同 重写前提必须要有继承关系而且是子类重写父类的方法
1.方法名必须相同
2.参数列表必须相同
3.修饰符范围可以扩大但是不能缩小比如父类如果是一个Private私有类型的假设可以被继承那么子类可以写成public的但是如果父类是public的子类重写时不能变成Private的类型。这里修饰符的优先级public protected default private也就是范围可以扩大但是不能缩小。
4.抛出的异常重写可能会抛出异常异常的范围可以被缩小但不能扩大这与方法重写修饰符刚好相反也就是子类本身是继承父类的方法如果抛出异常只在子类中抛出异常就行不能再连累父类。为什么需要重写 生活中我们经常遇到父类的功能子类不一定需要或者不一定满足父类中方法实现功能太多了子类只需要少部分即可满足或者父类太简单了不能满足子类的所以就需要子类重写父类的方法。