尚学堂 老师好!

上海:15201841284

广州:020-2989 6995

深圳:0755-23061965

武汉:027-8798 9193

西安:029-8822 8155

Java继承

Java中的继承是一种机制,表示为一个对象获取父对象的所有属性和行为。

在Java中继承是:可以创建基于现有类构建新的类。 当您从现有类继承时,就可以重复使用父类的方法和字段,也可以在继承的新类中添加新的方法和字段。

继承表示IS-A关系,也称为父子关系。
 

更多精彩内容以及学习资料,尚学堂论坛bbs.bjsxt.com免费下载。

为什么在java中使用继承?

对于方法覆盖(因此可以实现运行时的多态性),提高代码可重用性。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写(覆盖)。

Java继承的语法

 class Subclass-name extends Superclass-name   {      //methods and fields   } 
Java

extends关键字表示正在从现有类派生创建的新类。 “extends”的含义是增加功能。在Java的术语中,继承的类称为父类或超类,新类称为子或子类。

Java继承示例

Java继承

如上图所示,Programmer是子类,Employee是超类。 两个类之间的关系是Programmer IS-A Employee. 它表示 Programmer 是一种 Employee 的类型。

参考下面示例代码的实现 -

 class Employee {     float salary = 40000; }  class Programmer extends Employee {     int bonus = 10000;      public static void main(String args[]) {         Programmer p = new Programmer();         System.out.println("Programmer salary is:" + p.salary);         System.out.println("Bonus of Programmer is:" + p.bonus);     } } 
Java

执行上面代码得到以下结果 -

 Programmer salary is:40000.0 Bonus of programmer is:10000 
Java

在上面的例子中,Programmer对象可以访问自身类以及Employee类的字段,即提高了代码可重用性。

java继承类型

在类的基础上,在java中可以有三种类型的继承:单一,多级和分层。在Java编程中,仅能通过接口支持多重和混合继承。稍后章节中我们将了解学习接口的应用。

Java继承

注意:在java中的类不支持多继承。

当一个类扩展多个类,即被称为多重继承。 例如:

Java继承

(1). 单一继承示例

文件 TestInheritance.java 中的代码如下 -

 class Animal {     void eat() {         System.out.println("eating...");     } }  class Dog extends Animal {     void bark() {         System.out.println("barking...");     } }  class TestInheritance {     public static void main(String args[]) {         Dog d = new Dog();         d.bark();         d.eat();     } } 
Java

执行上面代码得到以下结果 -

 barking... eating... 
Java

(2). 多级继承示例

文件 TestInheritance2.java 中的代码如下 -

 class Animal {     void eat() {         System.out.println("eating...");     } }  class Dog extends Animal {     void bark() {         System.out.println("barking...");     } }  class BabyDog extends Dog {     void weep() {         System.out.println("weeping...");     } }  class TestInheritance2 {     public static void main(String args[]) {         BabyDog d = new BabyDog();         d.weep();         d.bark();         d.eat();     } } 
Java

执行上面代码得到以下结果 -

 weeping... barking... eating... 
Java

(3). 多级继承示例

文件 TestInheritance3.java 中的代码如下 -

 class Animal {     void eat() {         System.out.println("eating...");     } }  class Dog extends Animal {     void bark() {         System.out.println("barking...");     } }  class Cat extends Animal {     void meow() {         System.out.println("meowing...");     } }  class TestInheritance3 {     public static void main(String args[]) {         Cat c = new Cat();         c.meow();         c.eat();         // c.bark();//C.T.Error     } } 
Java

执行上面代码得到以下结果 -

 meowing... eating... 
Java

问题:为什么在Java中不支持多重继承?

为了降低复杂性并简化语言,Java中不支持多重继承。想象一个:ABC是三个类。 C类继承AB类。 如果AB类有相同的方法,并且从子类对象调用它,AB类的调用方法会有歧义。

因为编译时错误比运行时错误好,如果继承2个类,java会在编译时报告错误。 所以无论子类中是否有相同的方法,都会有报告编译时错误。例如下面的代码是编译出错的。

 class A {     void msg() {         System.out.println("Hello");     } }  class B {     void msg() {         System.out.println("Welcome");     } }  class C extends A,B {//suppose if it were     Public Static      void main(String args[]) {         C obj = new C();         obj.msg();// Now which msg() method would be invoked?     } } 
Java

 

更多精彩内容以及学习资料,尚学堂论坛bbs.bjsxt.com免费下载。

  • 北京校区
  • 西安校区
  • 山西校区
  • 武汉校区
  • 深圳校区
  • 上海校区
  • 广州校区
  • 保定招生办
  • 黑龙江项目办

北京京南校区:北京亦庄经济开发区科创十四街6号院1号楼 赛蒂国际工业园
咨询电话:400-009-1906 / 010-56233821
面授课程: JavaEE+微服务+大数据     大数据+机器学习+平台架构     Python+数据分析+机器学习  人工智能+模式识别+强化学习   WEB前端+移动端+服务端渲染

地址:陕西省西安市高新区西安软件园西区创新信息大厦A座三层尚学堂

电话:029-88228155 / 18291433445

山西学区地址:山西省晋中市榆次区大学城大学生活广场万科商业A1座702

武汉学区地址:武汉市东湖高新区光谷金融港B22栋11楼
咨询电话:027-87989193

深圳校区地址:深圳市宝安区航城大道U8智造产业园U6栋3楼
咨询电话:0755-23061965 / 18898413781

上海尚学堂校区地址:上海市浦东新区城丰路650号
咨询电话:021-67690939

广州校区地址:广州市天河区车陂街道大岗路5号中侨广场2栋321室(四号线车陂站D出口,或brt车陂站)
咨询电话:18948349646

保定招生办公室

地址:河北省保定市竞秀区朝阳南大街777号鸿悦国际1101室

电话:15132423123

黑龙江项目办
地点:哈尔滨市松北区博文路青年部落孵化器1层
电话:15321415678
Copyright 2006-2021 北京尚学堂科技有限公司  京ICP备13018289号-19  京公网安备11010802015183   营业执照
网站维护:北京尚学堂科技有限公司昌平分公司