JAVA继承

来源:互联网 发布:mac diva是什么颜色 编辑:程序博客网 时间:2024/05/02 02:06

首先,我们来说一下,为什么需要继承?简单的一句话,它可以提高代码的复用性,提高代码的可读性!我个人认为这一句话既可以说明为什么需要继承,也可以说明使用继承的意义。但继承的主要意义还是扩展类的功能。不多废话,进入正题.

首先,我们通过一个例子,来看一下继承。

Code:
  1. public class Person   
  2. {   
  3.               public Person(){}   
  4.   
  5.               public Person(String name,int age)   
  6.               {   
  7.                            this.setName(name);   
  8.                            this.setAge(age);   
  9.               }   
  10.   
  11.               private String name;   
  12.               public void setName(String name)   
  13.              {   
  14.                            this.name = name;   
  15.              }   
  16.              public String getName()   
  17.              {   
  18.                            return this.name;   
  19.              }   
  20.   
  21.              private int age;   
  22.              public void setAge(int age)   
  23.             {   
  24.                           this.age = age;   
  25.            }   
  26.             public int getAge()   
  27.             {   
  28.                             return this.age;   
  29.             }   
  30. }  

以上我们做为一个父类,关于是什么父类,我们后面介绍··

Code:
  1. pubilc class Student extends Person   
  2. {   
  3.   
  4.   
  5.               public Student()   
  6.              {   
  7.              }   
  8.              public Student(String name,int age,String hobby)   
  9.             {   
  10.                              super(name,age);  //利用super关键字   
  11.                             this.hobby = hobby;   
  12.             }   
  13.              //扩展的属性   
  14.              private String hobby;   
  15.   
  16.               public void setHobby(String hobby)   
  17.              {   
  18.                         this.hobby = hobby;   
  19.              }   
  20.              public String getHobby()   
  21.             {   
  22.                         return this.hobby;   
  23.             }   
  24. }  

如何实现继承呢?

在JAVA语言中,是用extends(扩展的意思)来表示一个类继承自另一个类的。

例如我们以上代码中的Student类就是继承了Person类.

注意:在JAVA中,不允许多重继承,例如:public class Student extends Person,Teacher{}这句代码就是错误的··

通常,我们会在父类中定义一些通用的属性与方法,所谓通用的属性与方法,也就是说,我们几个类中抽取出来的

相似的属性与方法,我们把这样的属性或者方法抽取出来放在一个类中,那么这个类就将成为我们那几个类的父类.

子类会自动继承父类中的属性和方法,子类也可以定义自己的属性和方法,就像我们上面代码中Student类中的Hobby属性,

就是我们Student类自己扩展的属性.

在子类的构造方法中,通过Super关键字来调用父类的构造方法,并且Super语句一定要放在该构造方法中的第一句中.因为在创建子类对象时,是先创建父类对象,然后创建子类对象,如果没有显式调用父类的构造方法,将自动调用父类的无参构造方法。

补充一点,就是关于父子类之间的术语问题:

有很多关于父子类的表述术语:比如父类和子类,超类和子类,基类和派生类

                                                        关于方法重写

在JAVA中,子类可以继承父类中的方法,而不需要重新编写方法,但是有的时候,我们不想

原封不动的使用继承自父类的方法,我们就必须对父类中的那个方法进行修改,那么我们就

需要使用到方法的重写.

方法的重写是针对于具有继承关系的两个类来说的.

Code:
  1. public class Person   
  2. {   
  3.              public void say()   
  4.              {   
  5.                       System.out.println("大家好,我是子类Person中的say方法");   
  6.              }    
  7. }  
Code:
  1. public class Student extends Person   
  2. {   
  3.               public void say()   
  4.             {   
  5.                            System.out.println("大家好,我是子类Student中的say方法");   
  6.             }   
  7. }  

以上Person类中的say方法就被重写了

方法重写的定义:

如果在子类中定义了一个方法、其名称、返回类型及参数列表正好与父类中某个方法的名称,

返回类型,参数列表相匹配,那么可以说,子类的方法重写了父类的方法.

注:1.在重写父类中的方法的时候,不能降低父类中方法的访问权限

     2.发生方法重写的两个类的名称,返回值以及参数列表必须完全一致.

     3.子类中抛出的异常不能大于父类中抛出的异常