博客
关于我
7.JAVA-类继承、覆写、final关键字
阅读量:437 次
发布时间:2019-03-06

本文共 3426 字,大约阅读时间需要 11 分钟。

1.JAVA继承-extends

在java中,要想实现继承则使用extends关键字.

一般子类被称为派生类,父类称为基类(super)

extends需要注意的地方:

  • java不允许多重继承(一个类只能继承一个父类,不能继承多个父类)
  • 派生类会继承基类所有属性和方法,但不能直接访问基类的private私有属性
  • 实例化派生类时,会先去调用父类的构造方法构造基类,再实例化自身的属性类对象,最后才是调用自身类构造方法.
  • 在派生类中,有个隐藏的super,表示为基类,所以我们可以通过它指定如何构造基类

 

1.1 示例1-super使用

注意:super必须放在构造方法首行使用,如果用户不使用super,则编译器默认调用super()来初始化父类

代码如下:

class Parent{         public Parent()         {                  System.out.println("Parent()");         }         public Parent(String str)         {                  System.out.println("Parent(String str):"+str);         }}class Derived extends Parent{         public Derived()         {                  super("123");           //调用Parent(String str)初始化父类                  System.out.println("Derived()");         }}public class Test{                  public static void main(String args[]){                  Derived d = new Derived();         }       }

打印如下:

 

 

2.JAVA继承之方法覆写

当派生类覆写基类的方法时候,要遵守方法的权限,返回值以及参数都一致.

如果派生类覆写的基类方法是private的,则不能实现覆写功能,因为基类的private方法是不可见的(参考2.2示例)

派生类覆写方法,一般用于基类的方法不满足当前派生类功能实现时,才会去覆写.

2.1 示例1-覆写

代码如下:

class Parent{         public void func(int i)         {                  System.out.println("Parent::func()");         }}class Derived extends Parent{         public void func(int i)              //覆写父类的func方法         {                  System.out.println("Derived::func()");         }}public class Test{                  public static void main(String args[]){                  Derived d = new Derived();                  d.func(1);         }       }

2.2示例2-派生类private无法实现覆写

先来个正常覆写的代码:

class Parent{         public void func()         {                  System.out.println("Parent::func()");         }         public void print()         {                  func();         }}class Derived extends Parent{         public void func()            //覆写父类的func方法         {                  System.out.println("Derived::func()");         }}public class Test{                  public static void main(String args[]){                  Derived d = new Derived();                  d.print();         }       }

 如下图所示,打印派生类的func():

 

然后将Parent的func()改为private:

private void func(){    System.out.println("Parent::func()");}

如下图所示,则打印基类的func():

 

2.3JAVA继承之如何通过派生类调用基类被覆盖的方法

在上面第1节,我们讲过派生类中有个隐藏的super,表示为基类.所以当基类被覆写的方法时,我们可以通过super来调用基类的方法.

示例-super调用基类方法

class Parent{         public void func()         {                  System.out.println("Parent::func()");         }}class Derived extends Parent{         public void func()            //覆写父类的func方法         {                  super.func();             //调用父类的func,如果不加super,则会出现一直递归                  System.out.println("Derived::func()");         }}public class Test{                  public static void main(String args[]){                    Derived d = new Derived();                    d.func();                 }       }

打印如下:

 

 

3.final关键字

在java中,final被称为终结器, final可以修饰变量,方法和类.

3.1 final修饰类

当final修饰类时,则表示该类为最终的,也就是说该类不能再有子类了,示例如下:

final class A {                 // 修饰该类不能有子类}class B extends A {             // 错误的继承}

 

3.2 final修饰方法

当在某个类的方法前面定义final时,则表示该方法不允许在子类里进行方法覆写(可以实现方法重载)

示例如下:

class A {         public final void fun() {}       //此方法不允许子类覆写         public void fun(int i) {}        //可以实现方法重载}class B extends A {         public void fun() {}            // 错误:此处不允许覆写}

 

3.3 final修饰变量

当final修饰变量时,则表示该变量为常量(类似C++中const).示例如下:

public static final String LICENSE = "GPL";                      //修饰全局常量,定义常量时,名称需大写

 

下章学习: 

 

转载地址:http://tviyz.baihongyu.com/

你可能感兴趣的文章
Mysql学习总结(40)——MySql之Select用法汇总
查看>>
Mysql学习总结(41)——MySql数据库基本语句再体会
查看>>
Mysql学习总结(42)——MySql常用脚本大全
查看>>
Mysql学习总结(43)——MySQL主从复制详细配置
查看>>
Mysql学习总结(44)——Linux下如何实现mysql数据库每天自动备份定时备份
查看>>
Mysql学习总结(45)——Mysql视图和事务
查看>>
Mysql学习总结(46)——8种常被忽视的SQL错误用法
查看>>
Mysql学习总结(48)——MySql的日志与备份还原
查看>>
Mysql学习总结(49)——从开发规范、选型、拆分到减压
查看>>
Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
查看>>
Mysql学习总结(50)——Oracle,mysql和SQL Server的区别
查看>>
Mysql学习总结(51)——Linux主机Mysql数据库自动备份
查看>>
Mysql学习总结(52)——最全面的MySQL 索引详解
查看>>
Mysql学习总结(53)——使用MySql开发的Java开发者规范
查看>>
Mysql学习总结(54)——MySQL 集群常用的几种高可用架构方案
查看>>
Mysql学习总结(55)——MySQL 语句大全再温习
查看>>
Mysql学习总结(56)——MySQL用户管理和权限设置
查看>>
Mysql学习总结(57)——MySQL查询当天、本周、本月、上周、本周、上月、距离当前现在6个月数据
查看>>
Mysql学习总结(58)——深入理解Mysql的四种隔离级别
查看>>
Mysql学习总结(59)——数据库分库分表策略总结
查看>>