Java extends关键词
Java继承是一种机制,其中一个对象获取父对象的所有属性和行为。它是OOPs(面向对象的编程系统)的重要组成部分。
Java继承的思想是可以创建新的建立在现有类之上的类。从现有类继承时,可以重用父类的方法和字段。此外,您还可以在当前类中添加新的方法和字段。
继承表示
IS-A关系,也称为
parent-child 关系。
为什么在Java中使用继承
对于方法覆盖(因此可以实现运行时多态) 。
用于代码可重用性。
继承中使用的术语
类: 类是具有共同属性的一组对象。它是用于创建对象的模板或蓝图。
子类: 子类是继承其他类的类。也称为派生类,扩展类或子类。
父类: : 超级类是子类从中继承要素的类。也称为基类或父类。
可重用性: 顾名思义,可重用性是一种机制,可帮助您在创建新类时重用现有类的字段和方法。您可以使用上一类中已定义的相同字段和方法。
Java继承的语法
class Subclass-name extends Superclass-name{
//methods and fields}
extends关键字表示您正在创建一个从现有类派生的新类。 "扩展"的意思是增加功能。
在Java的术语中,被继承的类称为父类或超类,而新类称为子级或子类。
Java继承示例
上图中,Programmer是子类,而Employee是超类。这两个类别之间的关系是
程序员IS-A雇员。这意味着程序员是雇员的一种。
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);
}
}
Programmer salary is:40000.0
Bonus of programmer is:10000
在上面的示例中,Programmer对象可以访问自己的类以及Employee类的字段,即代码可重用性。
java中的继承类型
在类的基础上,java中可以存在三种继承类型: 单层,多层和分层。
在Java编程中,仅通过接口支持多重继承和混合继承。
注意: Java通过类不支持多重继承。
当一个类继承多个类时,称为多重继承。例如:
单个继承示例
当一个类继承另一个类时,称为
单个继承。在下面给出的示例中,Dog类继承了Animal类,因此存在单个继承。
文件: 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();
}
}
输出:
多级继承示例
如果存在继承链,则称为
多级继承。如下面的示例所示,BabyDog类继承了Dog类,而Dog类又继承了Animal类,因此存在多级继承。
文件: 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();
}
}
输出:
weeping...
barking...
eating...
分层继承示例
当两个或多个类继承单个类时,称为
分层继承。在下面给出的示例中,Dog和Cat类继承了Animal类,因此存在层次结构继承。
文件: 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}
}
输出:
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{
//suppose if it were public static void main(String args[]){
C obj=new C();
obj.msg();
//Now which msg() method would be invoked?}
}