Java函数中如何实现多态和继承
Java函数中实现多态和继承是Java中面向对象编程的两个重要特性,可以大大增强代码的可复用性和可扩展性。
实现多态
多态是指一个父类类型的变量可以指向其子类类型的对象,且调用该变量的方法会根据实际类型执行子类中对应的方法。Java实现多态的机制有两种,分别是:
1. 通过继承和方法重写来实现多态
此方法是Java多态实现的基础,子类继承父类并重写(override)父类中的方法,然后通过父类类型的变量来调用该方法,就可以执行子类中对应的方法。例如:
class Shape {
public void draw() {
System.out.println("Shape");
}
}
class Circle extends Shape {
public void draw() {
System.out.println("Circle");
}
}
Shape s = new Circle();
s.draw(); // 输出 "Circle"
可以看到,通过父类类型的变量s调用draw()方法时,实际执行的是子类Circle中的draw()方法,因为Circle重写了Shape中的draw()方法。
2. 通过接口来实现多态
此方法是Java多态实现的另一种方式,定义一个接口,子类实现接口中的方法,并通过父类类型的变量来调用该方法。例如:
interface Shape {
void draw();
}
class Circle implements Shape {
public void draw() {
System.out.println("Circle");
}
}
Shape s = new Circle();
s.draw(); // 输出 "Circle"
可以看到,通过父类类型的变量s调用draw()方法时,实际执行的是子类Circle中实现的draw()方法。
实现继承
继承是指子类可以从父类继承其属性和方法,并在此基础上添加新的属性和方法。Java实现继承的关键在于继承关键词"extends",一个子类只能继承一个父类,但Java中允许多重继承,即一个子类可以同时继承多个接口。例如:
class Shape {
private int x;
private int y;
public Shape(int x, int y) {
this.x = x;
this.y = y;
}
public void move(int dx, int dy) {
this.x += dx;
this.y += dy;
}
}
class Circle extends Shape {
private double radius;
public Circle(int x, int y, double radius) {
super(x, y);
this.radius = radius;
}
public double getArea() {
return Math.PI * radius * radius;
}
}
Circle c = new Circle(0, 0, 1.0);
c.move(1, 1);
System.out.println(c.getArea()); // 输出 "3.141592653589793"
可以看到,子类Circle继承了父类Shape的属性和方法,并在此基础上添加了自己的属性和方法。
在实现继承时,还需要注意以下几点:
1. 父类中的private成员无法被子类访问,但可以通过public访问方法来使用。
2. 子类可以重写(override)父类中的方法,并通过super关键词来调用父类中的方法。
3. Java中禁止多重继承,只能继承一个父类,但可以实现多个接口。
总结
Java函数中实现多态和继承是Java面向对象编程的两大特点,通过实现多态和继承可以大大增强代码的可重用性和可扩展性。在实现多态时,可以通过继承和方法重写或接口来实现;在实现继承时,需要注意父类中的private成员无法被子类访问,子类可以重写父类中的方法,并通过super关键词来调用父类中的方法,Java中禁止多重继承,只能继承一个父类,但可以实现多个接口。
