首页 > 代码库 > Java三大特性之继承

Java三大特性之继承

1.继承概述

package cn;

publicclass Student {

   private String name;

   privateintage;

   public String getName() {

      returnname;

   }

   publicvoid setName(String name) {

      this.name = name;

   }

   publicint getAge() {

      returnage;

   }

   publicvoid setAge(intage) {

      this.age = age;

   }

   @Override

   public String toString() {

      return"Student [name=" + name + ", age=" + age + "]";

   }

}

 

package cn;

publicclass Teacher {

   private String name;

   privateintage;

   public String getName() {

      returnname;

   }

   publicvoid setName(String name) {

      this.name = name;

   }

   publicint getAge() {

      returnage;

   }

   publicvoid setAge(intage) {

      this.age = age;

   }

   @Override

   public String toString() {

      return"Teacher [name=" + name + ", age=" + age + "]";

   }

}

         通过上面的代码,我们可以看出学生类和老师类中都有相同的成员变量和成员方法,这样代码的重复度很高。而且,可以还有许多类似的类,比如:工人类,军人类等。这样写代码的代码量非常大,而且将来维护起来非常麻烦。所以,我们就思考:能不能把相同的成员变量和成员方法定义到同一个类中,让多个类和这个类产生关系呢?这多个类就具备了这个独立类的成员变量和成员方法,那该有多好啊?Java提供了继承,来满足我们的需求。

         多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类中无需再定义这些属性和行为,只要继承那个类即可。

         通过extends关键字可以实现类与类的继承,class 子类名 extends 父类名{}

         父类,又可以成为基类或超类;子类,又称为派生类。

         有了继承以后,我们定义一个类的时候,可以在一个已经存在的类的继承上,定义自己的新成员。

package cn;

publicclass Person {

   private String name;

   privateintage;

   public String getName() {

      returnname;

   }

   publicvoid setName(String name) {

      this.name = name;

   }

   publicint getAge() {

      returnage;

   }

   publicvoid setAge(intage) {

      this.age = age;

   }

   @Override

   public String toString() {

      return"Person [name=" + name + ", age=" + age + "]";

   }

}

package cn;

publicclass Student extends Person{}

package cn;

publicclass Teacher extends Person{}

 

2.继承的好处

         2.1提高了代码的复用性 多个类相同的成员变量和成员方法可以放到同一个类中。

         2.2提高了代码的维护性 如果功能的代码需要修改,修改一处即可。

         2.3让类与类之间产生了关系,是多态的前提 但是这也是继承的一个弊端:类之间的耦合性很强。

 

3.软件的设计原则

         高内聚,低耦合。

         内聚:就是自己完成某件事情的能力;耦合就是类与类之间的关系。

         我们在设计的时候的原则就是:自己能完成的就不麻烦别人,这样将来别人产生了修改,就对我的影响较小。

 

4.Java中继承的特点

         4.1Java只支持单继承,不支持多继承。

         一个类只能有一个父类,不可以有多个父类。

         classSubDemo extends Demo{}//正确

         classSubDemo extends Demo1,Demo2{}//错误

         4.2Java支持多层继承

         classA{}

         classB extends A{}

         classC extends B{}

 

5.Java中继承的注意事项

         子类只能继承父类所有非私有的成员(成员方法和成员变量)。其实,这也是继承的另一个弊端,打破了封装性。

         子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。

         我们什么时候使用继承呢?继承中类之间体现的是:“is a”的关系。例如:水果和苹果,苹果是一种水果。学生和人,学生是人的一种。

 

6.super关键字

         6.1super的用法和this很像

         this表示本类对象的默认引用

         super表示父类存储空间的标志

         6.2用法

         访问成员变量

                   this.成员变量

                   super.成员变量

         访问构造方法

                   this(...)

                   super(...)

         访问成员方法

                   this.成员方法();

                   super.成员方法();

 

7.继承中构造方法的关系

         子类中所有的构造方法默认都会调用父类的无参构造方法。

         why?因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。

         如果父类中没有构造方法,那该怎么办呢?

                   子类可以通过super去显示调用父类其他的带参的构造方法

                   子类可以通过this去调用本类的其他构造方法,当然本类其他构造也必须首先访问父类构造。

                   一定注意:this(...)super(...)必须出现在第一条语句

        

8.方法重写概述

         子类中出现了和父类中一模一样的方法声明,也称为方法覆盖,方法复写。

         使用特点:如果方法名不同,就调对应的方法。如果方法名相同,最终使用的是子类自己的。

         方法重写应用:当子类需要父类的功能,而功能主体子类有自己特有的内容时,可以重写父类中的方法,这样,既沿袭了父类的功能,又定义了子类特有的内容。

         方法重写的注意事项:1.父类中私有方法不能被重写2.子类重写父类方法时,访问权限不能更低 

 


本文出自 “11831428” 博客,请务必保留此出处http://11841428.blog.51cto.com/11831428/1856611

Java三大特性之继承