查看原文
其他

【Java编程教程】详解Java 继承

点击关注 👉 Java面试那些事儿 2023-09-01

整理:Java面试那些事儿


Java 中的继承是一种机制,其中一个对象获取父对象的所有属性和行为。它是OOPs(面向对象编程系统)的重要组成部分。


Java 中继承背后的思想是您可以创建基于现有类的新类。当您从现有类继承时,您可以重用父类的方法和字段。此外,您还可以在当前类中添加新方法和字段。


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


# 为什么在java中使用继承


  • 对于方法覆盖(因此可以实现运行时多态性)。

  • 为了代码的可重用性。


# 继承中使用的术语



# Java继承的语法


class Subclass-name extends Superclass-name { //方法和字段 }


extends关键字表示您正在创建一个派生自现有类的新类。“扩展”的意思是增加功能。


在 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("程序员工资为:"+p.salary); System.out.println("程序员的奖金是:"+p.bonus); } }


输出:

程序员工资为:40000.0程序员奖金为:10000


在上面的示例中,Programmer 对象可以访问自己类的字段以及Employee 类的字段,即代码可重用性。


文末福利
文末领取:651页Java面试题库


# java中的继承类型


在类的基础上,java中可以有三种继承类型:单级、多级和层次。


在java编程中,仅通过接口支持多重继承和混合继承。稍后我们将学习接口。


注意:Java 通过类不支持多重继承。


当一个类继承多个类时,称为多重继承。例如:


# 单一继承示例


当一个类继承另一个类时,它被称为单继承。在下面给出的例子中,Dog 类继承了 Animal 类,因此存在单继承。


文件:TestInheritance.java

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


输出:

叫声...吃...

# 多级继承示例


当有一个继承链时,它被称为多级继承。正如您在下面给出的示例中看到的,BabyDog 类继承了 Dog 类,Dog 类又继承了 Animal 类,因此存在多级继承。


文件:TestInheritance2.java

class Animal{ void eat(){System.out.println("吃...");} } class Dog extends Animal{ void bark(){System.out.println("叫声...");} } class BabyDog extends Dog{ void weep(){System.out.println("哭泣...");} } class TestInheritance2{ public static void main(String args[]){ BabyDog d=new BabyDog(); d.weep(); d.bark(); d.eat(); }}


输出:

哭泣...叫声...吃...


# 层次继承示例


当两个或多个类继承一个类时,称为层次继承。在下面给出的例子中,Dog 和 Cat 类继承了 Animal 类,因此存在层次继承。


文件:TestInheritance3.java

class Animal{ void eat(){System.out.println("吃...");} } class Dog extends Animal{ void bark(){System.out.println("叫声...");} } class Cat extends Animal{ void meow(){System.out.println("喵呜……");} } class TestInheritance3{ public static void main(String args[]){ Cat c=new Cat(); c.meow(); c.eat(); //c.bark();//C.T.Error }}


输出:

喵呜……吃...


# Q) 为什么java不支持多重继承?


为了降低复杂度和简化语言,java不支持多重继承。


考虑一个场景,其中 A、B 和 C 是三个类。C类继承了A类和B类。如果 A 类和 B 类有相同的方法,而你从子类对象调用它,那么调用 A 类或 B 类的方法就会产生歧义。


由于编译时错误比运行时错误好,如果您继承 2 个类,Java 会呈现编译时错误。所以无论你有相同的方法还是不同的方法,都会有编译时错误。


class A{ void msg(){System.out.println("Hello");} } class B{ void msg(){System.out.println("Welcome");} } class C extends A,B{ //假设它是
public static void main(String args[]){ C obj=new C(); obj.msg();//现在将调用哪个 msg() 方法?} }


输出:

Compile Time Error



程序员技术交流群


扫码进群记得备注:城市、昵称和技术方向


热门推荐:


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存