继承的释义
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
继承的作用:通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。
继承的格式为:
class 父类{
语句体;
}
class 子类 extends 父类{
语句体;
}
实例为:
public class Di1 { public static void main(String[] args) { Di3 di3 = new Di3(); di3.zi(); } }public class Di2 { String name="小红"; int age=15; public void fu(){ System.out.println(name+"的年龄为"+age); } }
public class Di3 extends Di2 { public void zi(){ fu(); } }
在上述代码中子类Di3直接调用了父类Di2中的属性和行为。
需要注意的是:
- 子类不能选择性继承父类;
- Java不支持多重继承,但一个类可以实现多个接口,从而克服单继承的缺点;
- 构造方法不会被子类继承,但可以从子类中调用父类的构造方法。
继承的优点
继承过来的字段和方法,可以像任何其他字段和方法一样被直接使用;
在子类中可以声明一个与父类中同名的新字段或静态方法,从而“隐藏”父类中的字段或方法;
可以在子类中声明一个在父类中没有的新字段和方法;
可以在子类中编写一个父类当中具有相同名的新实例方法,这称为“方法重写”或“方法覆盖”;
可以在子类中编写一个调用父类构造方法的子类构造方法,既可以隐式地实现,也可以通过使用关键字super来实现。
重写
当父类继承下来的方法不满足子类需要的时候,可以写一个和父类声明一样的方法,方法体中逻辑重新实现,这个子类重新定义的方法就是重写后的方法。重写后的方法会覆盖父类的功能,因此成为方法重写,方法的覆盖。
重写的格式:
修饰符 返回值类型 方法名 (参数列表) {
方法体;
}
在子类中重写时除了方法体不一样之外声明必须完全一样。
实例:
public class Di1 { public static void main(String[] args) { Di3 di3 = new Di3(); di3.fu(); di3.fu1(); } }public class Di2 { public void fu(){ System.out.println("今天是个好天气"); } public void fu1(){ System.out.println("出去郊游"); } }public class Di3 extends Di2 { public void fu(){ System.out.println("今天下雨,寄"); } }
原本在父类Di2中方法fu会输出(今天是个好天气),通过在子类中重写方法fu输出成了(今天下雨,寄) 。
注意事项:子类方法覆盖父类方法,必须要保证权限大于等于父类权限
权限指的是作用域,可以理解为若想要重写子类的作用域修饰符范围必须大于等于父类的。
若是将上面代码里子类的作用域修饰符改为protected则会直接报错,原因就是protected范围小于public。