Java中如何正确的理解的继承

  介绍

本篇文章为大家展示了如何正确的理解Java中的继承,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Java作为一面向对象的语言,具备面向对象的三大特征,继承,多态,封装。

继承顾名思义,继任,承接,传承的意思。面向对象的语言有一个好处,就是可以用生活中的例子来说明面向对象的特性。那么我们先来看看生活中的继承关系有哪些?最常见的:父母子女;汽车,电动车,自行车和车。无论哪种车,都有具备车的特性。再比如说:家里面的电饭的锅,电磁炉,电冰箱。他们都属于电器类,都具有名字这个属性,也都需要用电这个方法。如果在程序中我们一个个类去把这些重复的代码都写上去,那不是浪费时间和精力吗?联系之前的知识,我们能够从一个个对象中抽象出来一个类。那么我们也应该能够从具有包含关系的一个个类中抽象出一个具有共同属性和方法的类,也就是父类,比如说无论是三角形,矩形还是圆形,他们都有求边长的方法,那么就可以抽象出一个父类图形类,类中有一个求边长的方法. Java中的继承使用的是扩展关键字,继承的类叫做子类(派生类或者超类),被继承的类叫做父类(或者基类)。凡是这种可以有包含关系的类都能实现继承关系。

<强>下面是继承的格式:

public  class 子类类名,extends 父类类名{   }

<>强来看一个继承的简单例子:

//父类   public  class  Person  {   ,,   private 才能;String 名称;   public 才能;int 年龄;   protected 才能;char 性别;   String 才能;;   ,,   public 才能;String  getName () {   ,,,return 名称;   ,,}   public 才能;void  setName (String 名称){   ,,,this.name=名称;   ,,}   ,,   public 才能;void 说话(){   ,,,System.out.println(名字+“正在说话!“);   ,,}   }//子类   public  class  Teacher  extends  Person  {      }//测试类   public  class  Test  {   public 才能;static  void 主要(String  args []) {   ,,,Teacher  t=new 老师();//实例化子类//,,,,t.name=罢湃?//编译器报的错   ,,,t.sex=& # 39;男& # 39;;   ,,,t.age=10;   ,,,t.country=爸泄?   ,,,t.setName(“张三“);   ,,,t.getName ();   ,,,t.speak ();   ,,}   }

运行后发现可以正常输出,也就是说子类里面在没有定义任何属性和方法的情况下,可以使用由父类继承来的属性和方法,这也就说明了继承的实现。那么子类都从父类继承了那些内容呢?答案是:子类类可以继承父类所有的属性和方法。这里可能就会有人疑惑了,那测试类中的名字属性不是报错了吗?那么私有的属性是不是不能够被继承呢?如果说,子类没有继承父类的名称这个属性,那么子类中就不存在的名字这个属性,既然不存在,那么子类中的setName, getName,说这三个方法应该都会报错才对,但事实是并没有报的错,所以Java中子类是可以继承父类中的所有的方法和属性值的. Java中的访问修饰符是用于限制类中的属性或者方法的访问权限的,与是否被继承并没有直接关系。这才是名字属性值报错的原因。

当然子类是可以定义自己特有属性和方法的,这个并没有任何问题。弄清楚了子类能够继承父类那些东西之后,我们给父类加上这么一段代码:

public 人(String 名称){   this.name才能=名称;   }

给父类加上了这个构造器之后发现,子类报错了!这是为什么呢?原来Java在实例化子类对象的时候会通过子类的无参构造器调用父类的无参构造器,当给父类提供了一个有参构造器,JVM不会再为父类提供默认的无参构造器,子类实例化对象找不到父类无参构造器编译器自然会报错了。

下面我们来验证一下:

<强>给父类加上无参构造器:

public 人(){   ,,System.out.println(“父类构造器被调用了“);   }

控制台输出结果如下:

如何正确的理解Java中的继承

这也就证明了子类会调用父类的无参构造器,也就是说子类在实例化的时候是产生了两个对象(这里不考虑对象),一个子类对象,一个父类对象。

好到这里相信读者对类的继承已经基本清楚了。我们返回我们刚才使用的例子,我们定义了人这个类,类里面有说话(说话)的方法。试想定义几个类:中国人,美国人,俄罗斯的人,他们都继承人这个类,都有说话的方法,但是他们说话的方法一样吗?可以直接使用父类的说话方法吗?中国人说话用中文,美国人用英语,俄罗斯用俄语,显然不能用同一个方法。也就是说当父类的方法不满足子类的需求的时候,那怎么办?这里就可以用到方法的重写。

Java中如何正确的理解的继承