📅  最后修改于: 2020-03-19 01:22:50             🧑  作者: Mango
继承是OOP(面向对象编程)的重要支柱。这是Java中允许一个类继承另一类的功能(字段和方法)的机制。
重要术语:
用于继承的关键字是extends。
语法 :
class derived-class extends base-class
{
//方法和字段
}
示例:在下面的继承示例中,Bicycle类是基类,MountainBike类是扩展了Bicycle类的派生类,而Test类是要运行程序的驱动程序类。
//Java代码,展示继承
class Bicycle
{
// Bicycle类有两个fields
public int gear;
public int speed;
// Bicycle的构造器
public Bicycle(int gear, int speed)
{
this.gear = gear;
this.speed = speed;
}
// Bicycle有三个方法
public void applyBrake(int decrement)
{
speed -= decrement;
}
public void speedUp(int increment)
{
speed += increment;
}
// toString()打印实例信息
public String toString()
{
return("齿轮数 "+gear
+"\n"
+ "车速 "+speed);
}
}
// 测试代码
class MountainBike extends Bicycle
{
// MountainBike在父类基础上增加了一个field
public int seatHeight;
// MountainBike的构造器
public MountainBike(int gear,int speed,
int startHeight)
{
// 调用哪个基类(Bicycle)的构造器
super(gear, speed);
seatHeight = startHeight;
}
// MountainBike增加了一个方法
public void setHeight(int newValue)
{
seatHeight = newValue;
}
// 重写toString(),打印更多信息
@Override
public String toString()
{
return (super.toString()+
"\n座位高度 "+seatHeight);
}
}
// 测试代码
public class Test
{
public static void main(String args[])
{
MountainBike mb = new MountainBike(3, 100, 25);
System.out.println(mb.toString());
}
}
输出:
齿轮数 3
车速 100
座位高度 25
在上面的程序中,创建MountainBike类的对象时,超类的所有方法和字段的副本将在该对象中获取内存。这就是为什么通过使用子类的对象,我们还可以访问超类的成员。
请注意,在继承期间仅创建子类的对象,而不创建超类的对象。
该程序的说明图:
实际上,继承和多态在Java中一起使用,以实现快速的性能和代码的可读性。
Java中的继承类型
以下是Java支持的不同类型的继承。
//Java展示单继承
import java.util.*;
import java.lang.*;
import java.io.*;
class one
{
public void print_mango()
{
System.out.println("芒果");
}
}
class two extends one
{
public void print_for()
{
System.out.println("for");
}
}
// 测试代码
public class Main
{
public static void main(String[] args)
{
two g = new two();
g.print_mango();
g.print_for();
g.print_mango();
}
}
输出:
芒果
for
芒果
// Java展示多继承
import java.util.*;
import java.lang.*;
import java.io.*;
class one
{
public void print_mango()
{
System.out.println("芒果");
}
}
class two extends one
{
public void print_for()
{
System.out.println("for");
}
}
class three extends two
{
public void print_mango()
{
System.out.println("芒果");
}
}
// 测试类
public class Main
{
public static void main(String[] args)
{
three g = new three();
g.print_mango();
g.print_for();
g.print_mango();
}
}
输出:
芒果
for
芒果
// Java展示层次继承
import java.util.*;
import java.lang.*;
import java.io.*;
class one
{
public void print_mango()
{
System.out.println("芒果");
}
}
class two extends one
{
public void print_for()
{
System.out.println("for");
}
}
class three extends one
{
/*............*/
}
// Drived class
public class Main
{
public static void main(String[] args)
{
three g = new three();
g.print_mango();
two t = new two();
t.print_for();
g.print_mango();
}
}
输出:
芒果
for
芒果
// Java展示多重继承
import java.util.*;
import java.lang.*;
import java.io.*;
interface one
{
public void print_mango();
}
interface two
{
public void print_for();
}
interface three extends one,two
{
public void print_芒果();
}
class child implements three
{
@Override
public void print_芒果() {
System.out.println("芒果");
}
public void print_for()
{
System.out.println("for");
}
}
// Drived class
public class Main
{
public static void main(String[] args)
{
child c = new child();
c.print_mango();
c.print_for();
c.print_mango();
}
}
输出:
芒果
for
芒果
有关Java继承的重要事实
在子类中可以做什么?
在子类中,我们可以按原样继承成员,替换它们,隐藏它们或用新成员补充它们: