Java继承
Java中的继承是一种机制,其中一个对象获取父对象的所有属性和行为。这是一个重要组成部分OOPS(面向对象的编程系统)。
Java继承的作用,你可以在现有类的基础上建立新类。从现有类继承时,可以重用父类的方法和字段。此外,您还可以在当前类中添加新的方法和字段。
继承表示IS-A
关系,也称为父子关系。
1 为什么Java中要有继承
- 有利于方法覆盖(方法覆盖又可以实现运行时多态,后面章节会讲到)。
- 用于代码可重用性。
2 Java继承的相关术语
- 类:类是具有共同属性的一组对象。它是从中创建对象的模板或蓝图。
- 子类:子类是继承其他类的类。也称为派生类,扩展类或子类。
- 父类:父类是子类从中继承的类。也称为基类或父类。
- 可重用性:顾名思义,可重用性是一种机制,可在创建新类时方便你重用现有类的字段和方法。您可以使用父类中已经定义的相同字段和方法。
3 Java继承的语法
class Subclass-name extends Superclass-name
{
//字段和方法
}
extends关键字表明你这个新的类要继承另一个类。“extends”的意思是增加功能。
在Java术语中,被继承的类称为父类或超类,而新类称为子类。
4 Java继承的示例
如上图所示,Programmer是子类,而Employee是父类。这两个类之间的关系是Programmer IS-A Employee。这意味着程序员是雇员的一种。
/**
* 一点教程网 - http://www.yiidian.com
*/
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类的字段,即代码的可重用性。
5 Java继承的类型
在类的基础上,Java中可以有三种继承类型:单继承,多继承和分层继承。
在Java编程中,只有接口支持多重继承和混合继承。后面章节我们将学习接口。
注意:Java通过类不支持多重继承和混合继承,就像下图一样。
6 单继承的示例
当一个类继承另一个类时,称为单继承。在下面给出的示例中,Dog类继承了Animal类,因此只有一个继承。
TestInheritance.java:
/**
* 一点教程网 - http://www.yiidian.com
*/
//单继承的示例
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();
}
}
输出结果为:
barking...
eating...
7 多继承的示例
存在继承链时,称为多继承。在下面的示例中可以看到,BabyDog类继承了Dog类,而Dog类又继承了Animal类,因此存在多继承。
TestInheritance2.java:
/**
* 一点教程网 - http://www.yiidian.com
*/
//多继承的示例
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...
8 分层继承的示例
当两个或多个类继承单个类时,称为分层继承。在下面给出的示例中,Dog和Cat类继承了Animal类,因此存在分层继承。
/**
* 一点教程网 - http://www.yiidian.com
*/
//分层继承的示例
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();//这行代码会编译报错
}}
输出结果为:
meowing...
eating...
9 为什么Java不支持多重继承
为了降低复杂性并简化语言,Java不支持多重继承。
考虑一个场景,其中A,B和C是三个类别。C类继承A和B类。如果A和B类具有相同的方法,并且你从子类对象调用它,则在调用A或B类的方法时存在歧义。
由于编译时错误比运行时错误要好,因此,如果你继承2个类,则Java会发生编译时错误。所以,无论你使用的是相同方法还是不同方法,都会出现编译时错误。
/**
* 一点教程网 - http://www.yiidian.com
*/
//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方法会被执行呢?是不是存在歧义,所以这个语法不合理!
}
}
以上代码会编译报错!
热门文章
优秀文章