---恢复内容开始---java
这篇随笔和你们讲讲java中类的继承是什么?但愿对大家有所帮助。编程
目录this
1、Java继承是什么?spa
简单来说,Java中的继承是一个对象获取父对象的全部属性和行为的机制。它是面向对象编程系统(OOP)的重要组成部分。Java中继承的思想是,建立基于现有类的新类。从现有类中继承,能够重用父类的方法和字段。此外,还能够在当前类中添加新方法和字段设计
继承表示IS-A关系,也称为父子关系。3d
二·、为何使用继承?code
继承就是 好比,你和你的父亲,你能够继承你父亲身上的基因,但继承基因的同时你能够除了继承你父亲基因的同时再创造新的基因,就好比你父亲不高,可是你想变高,就能够在基础的同时使用重写来改变你的身高。对象
那为何要使用继承呢?blog
一、能够实现方法重写(这样能够实现运行时多态性)。提升了代码的复用性。继承
二、继承容许咱们重用代码,它提升了Java应用程序的可重用性。
3、继承的实现
1.java继承的基本语法
1 package pkg12; 2 //Son是子类 ,Father是父类 因此就是子类继承(extends)父类 3 public class Son extends Father{ 4 //方法...... 5 6 }
若是要继承一个类的话,就要使用extends关键字
提示:继承按时着成员在派生类中课访问,而不是仅仅限于当前定义的类,要在包含基类的包的外部派生一个类,这个基类就必循声明为public ,若是没有声明为public 这个类就不能直接地扩展到包的外部。
二、继承的特色:
用一个习题,来解释一下什么叫作继承,代码以下:
1 package pkg11; 2 3 //定义了一个老师类 同时都有两个属性和两个方法 4 class TeachJava{ 5 String name; 6 int age; 7 8 public void TeachJava(){ 9 System.out.println(this.name+"在上java课"); 10 } 11 public void sleep(){ 12 System.out.println(this.name+"在休息"); 13 } 14 } 15 16 17 //定义了二个老师类 同时都有两个属性和两个方法 18 class TeachHtml{ 19 String name; 20 int age; 21 public void TeachHtml(){ 22 System.out.println(this.name+"在上Html课"); 23 } 24 public void sleep(){ 25 System.out.println(this.name+"在休息"); 26 } 27 } 28 29 30 public class TextExtends{ 31 public static void main(String args[]){ 32 //实例化出第一个老师 33 TeachJava tj = new TeachJava(); 34 tj.name = "张三"; 35 tj.age = 18 ; 36 tj.TeachJava(); 37 tj.sleep(); 38 //实例化出第二个老师 39 TeachHtml th = new TeachHtml(); 40 th.name = "李四"; 41 th.age = 34; 42 th.TeachHtml(); 43 th.sleep(); 44 } 45 }
运行效果:
看到咱们定义两个老师类,你们有没有发现一个问题呢?就是我定义了两个老师类, 两个老师类里面发现两个相同的属性和一个方法 ,这时咱们就能够采用继承的方式来设计这个案例。
那咱们应该怎么设计呢? 遵循上面说到的继承语法:子类 继承 父类。
1 package pkg11; 2 //咱们能够把相同的属性和方法放在一个类中,定义为 父类 3 4 //父类 5 class Teacher{ 6 String name; 7 int age; 8 9 public void sleep(){ 10 System.out.println(this.name+"在睡觉"); 11 } 12 } 13 14 //子类 15 16 17 // 子类 继承 父类 18 class TeachJava extends Teacher{ 19 public void TeachJava(){ 20 System.out.println(this.name+"在讲java课程"); 21 } 22 } 23 24 // 子类 继承 父类 25 class TeachHtml extends Teacher{ 26 27 public void TeachHtml(){ 28 System.out.println(this.name+"在讲HTML课程"); 29 } 30 } 31 32 public class TextExtends1{ 33 public static void main(String args[]){ 34 TeachJava tj = new TeachJava(); 35 tj.name = "张三";//调用父类中的属性 36 tj.age = 20; 37 tj.TeachJava();//钓鱼本身的方法 38 tj.sleep();//调用父类的方法。 39 TeachHtml th = new TeachHtml(); 40 th.name="李四";//调用父类中的属性 41 th.age = 25; 42 th.TeachHtml();//调用本身的方法 43 th.sleep();//调用父类的方法。 44 } 45 }
两个老师类的中重复的属性和方法,我没个把他归结为一个类当中做为 父类 ,由于咱们继承的父类的属性和方法,因此咱们就有和父类相同的属性和方法,因此继承的最明显的优势就是减小了代码的重复性。
这样继承和咱们以前写的代码运行效果会同样吗?运行效果以下:
子类只能得到父类中的非private的属性,若是想要继承就得提供公共的set和get的方法,私有的方法是没法继承的。
这句特色要这样理解呢 为何说要继承就的使用set和get方法呢?先看代码:
package pkg11; //咱们能够把相同的属性和方法放在一个类中,定义为 父类 //父类 class Teacher{ private String name; int age; public void sleep(){ System.out.println(this.name+"在睡觉"); } } //子类 // 子类 继承 父类 class TeachJava extends Teacher{ public void TeachJava(){ System.out.println(name+"在讲java课程"); } } // 子类 继承 父类 class TeachHtml extends Teacher{ public void TeachHtml(){ System.out.println(this.name+"在讲HTML课程"); } } public class TextExtends1{ public static void main(String args[]){ TeachJava tj = new TeachJava(); tj.name = "张三"; tj.age = 20; tj.TeachJava(); tj.sleep(); TeachHtml th = new TeachHtml(); th.name="李四"; th.age = 25; th.TeachHtml(); th.sleep(); } }
在我父类属性中加了一个private,这样咱们再运行运行程序看看会发生什么?
这里发生了报错,都在name的报错,因此上面的特色 说的真是这点私有的方法是没法继承的。
若是想在继续继承父类的话,那么咱们就的使用封装的方法,get和set
1 //父类 2 class Teacher{ 3 private String name; 4 int age; 5 6 //封装 7 public void setName(String name){ 8 this.name = name; 9 } 10 public void getName(){ 11 return name; 12 } 13 public void sleep(){ 14 System.out.println(this.name+"在睡觉"); 15 } 16 }
以后调用方法就能够进行继承了。 1 package pkg11; 2 //咱们能够把相同的属性和方法放在一个类中,定义为 父类 3
4 //父类 5 class Teacher{ 6 private String name; 7 int age; 8 9 //封装 10 public void setName(String name){ 11 this.name = name; 12 } 13 public void getName(){ 14 return name; 15 } 16 public void sleep(){ 17 System.out.println(this.name+"在睡觉"); 18 } 19 } 20 //子类 21 // 子类 继承 父类 22 class TeachJava extends Teacher{ 23 public void TeachJava(){ 24 System.out.println(this.getName+"在讲java课程"); 25 } 26 } 27 // 子类 继承 父类 28 class TeachHtml extends Teacher{ 29 30 public void TeachHtml(){ 31 System.out.println(this.getName()+"在讲HTML课程"); 32 } 33 } 34 public class TextExtends1{ 35 public static void main(String args[]){ 36 TeachJava tj = new TeachJava(); 37 //tj.getName = "张三";
tj.getName("张三"); 38 tj.age = 20; 39 tj.TeachJava(); 40 tj.sleep(); 41 TeachHtml th = new TeachHtml(); 42 //th.getName="李四";
th.getName("李四"); 43 th.age = 25; 44 th.TeachHtml(); 45 th.sleep(); 46 } 47 }
运行效果:
以上继承是单一继承,java还有多极继承
多级继承: 在多级继承中,派生类将继承基类,而且派生类也充当其余类的基类。在下面的图像中,类A用做派生类B的基类,后者又用做派生类C的基类。在Java中,类不能直接访问祖父母的成员。
就是能够继承多个
package pkg11; //多极继承 class A{ } class B extends A{ } class C extends B{ } public class TextExtends1{ public static void main(String args[]){ } }
运行效果:
可是不支持多继承,它能够支持继承多个类,但不支持同时继承两个类。
这样是不支持的
1 package pkg11; 2 //错误展现 3 4 class A{ 5 6 } 7 8 class B{ 9 10 } 11 12 class C extends A,B{ 13 14 } 15 16 public class TextExtends3{ 17 public static void main(String args[]){ 18 19 } 20 }
运行效果:
总结:
继承的优缺点
优势:一、代码共享,减小建立类的工做量,每一个子类都拥有父类的方法和属性。
二、提升代码的重用性,子类能够形似父类,但又异于父类。
三、提升代码的可扩展性。
缺点:
一、只要继承,就必须拥有父类的全部属性和方法; 二、下降代码的灵活性。子类必须拥有父类的属性和方法,让子类多了约束; 三、加强了耦合性,当父类的常量、变量和方法被修改时,须要考虑子类的修改,并且在缺少规范的环境下,修改可能会形成严重的后果。