十四、Java基础之方法重写/覆盖
/*
一、关于方法的重写/覆盖:
1.什么时候需要方法重写?
如果父类中的方法无法满足子类中的业务需求,需要将父类中的方法重写一次
2.子类如果重写父类的方法之后,子类对象一定调用的方法是重写之后的方法
3.发生方法覆盖的条件
1.发生在具有继承关系的两个类之间
2.必须具有相同的方法名,相同的返回值类型,相同的参数列表
3.重写的方法不能比被重写的方法拥有更低的权限访问(父类中带有public---子类中不能丢失public;父类中没有public---子类中可带有public)
4.重写的方法不能比被重写的方法抛出更宽泛的异常(异常机制)
5.私有方法不能被覆盖
6.构造方法无法被覆盖。因为构造方法无法被继承
7.静态方法不存在覆盖
8.覆盖指的是成员方法,和成员变量无关
4.继承最基本的作用,代码重用
4.继承最基本的作用:方法的重写
*/
public class testMethod01 { public static void main(String[] args){ Dog d=new Dog(); d.m1(100); Animal a=new Animal(); a.m1(66); } } //父类,动物 class Animal{ //Field int age; //Constructor Animal(){} public void m1(int age){ System.out.println("动物的基本年龄是"+age); } } //子类,狗 class Dog extends Animal{ public void m1(int age){ System.out.println("dog的基本年龄是"+age); } }
二、覆盖与重写
1.私有方法不能被覆盖
2.构造方法无法被覆盖。因为构造方法无法被继承
//父类 class TestA { private void m1(){ System.out.println("A----m1"); } public static void main(String[] args){ //多态 TestA t=new TestB(); t.m1();//A---m1 } } //子类 class TestB extends TestA{ //尝试重写父类私有方法 private void m1(){ System.out.println("B-----m1"); } }
3.静态方法不存在覆盖
public class Test02 { public static void main(String[] args){ A a=new B(); a.m1();//A-----m1 } } class A{ //静态方法 public static void m1(){ System.out.println("A-----m1"); } } class B extends A{ //尝试重写父类的静态方法 public static void m1(){ System.out.println("B-----m1"); } }
当有些人一出生就有的东西,我们要为之奋斗几十年才拥有。但有一样东西,你一辈子都不会有,那就是我们曾经一无所有。