Java 抽象封装继承多态
Java是一种面向对象的编程语言,其中抽象、封装、继承和多态是其核心概念。这些概念是Java语言的基石,也是开发Java应用程序的基本要素。本文将详细介绍这些概念,并通过代码示例来说明它们的用法和作用。
抽象
抽象是指将现实世界中的事物抽象成程序中的类或接口。Java中的抽象通过关键字abstract
来实现。抽象类是一种不能被实例化的类,只能被继承。抽象类可以包含抽象方法,抽象方法是一种没有实现的方法,它只有方法签名,没有方法体。抽象方法必须在子类中被实现。
// 抽象类
abstract class Animal {
// 抽象方法
public abstract void sound();
}
// 子类实现抽象方法
class Cat extends Animal {
public void sound() {
System.out.println("喵喵喵");
}
}
class Dog extends Animal {
public void sound() {
System.out.println("汪汪汪");
}
}
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
cat.sound();
Dog dog = new Dog();
dog.sound();
}
}
在上面的代码示例中,Animal
是一个抽象类,它包含了一个抽象方法sound
。Cat
和Dog
是Animal
的子类,它们实现了sound
方法。在Main
类中,我们创建了Cat
和Dog
的实例,并调用它们的sound
方法。
封装
封装是将数据和操作数据的方法封装在一个类中,只暴露必要的接口给外部访问。通过封装,我们可以隐藏类的内部实现细节,提高代码的可维护性和重用性。在Java中,封装通过访问修饰符来实现,常用的访问修饰符有private
、protected
和public
。
class Person {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge() {
return age;
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.setName("John");
person.setAge(25);
System.out.println("Name: " + person.getName());
System.out.println("Age: " + person.getAge());
}
}
在上面的代码示例中,Person
类封装了name
和age
两个私有属性,并提供了公共的访问方法setName
、getName
、setAge
和getAge
来操作这些属性。在Main
类中,我们创建了一个Person
对象,并通过访问方法来设置和获取其属性。
继承
继承是一种创建新类的机制,通过继承,一个类可以继承另一个类的属性和方法。被继承的类称为父类或超类,继承这个类的类称为子类或派生类。子类可以继承父类的非私有属性和方法,并且可以重写父类的方法。
class Shape {
protected double area;
public void calculateArea() {
System.out.println("Calculating area...");
}
public void displayArea() {
System.out.println("Area: " + area);
}
}
class Rectangle extends Shape {
private double length;
private double width;
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
public void calculateArea() {
area = length * width;
}
}
public class Main {
public static void main(String[] args) {
Rectangle rectangle = new Rectangle(5, 3);
rectangle.calculateArea();
rectangle.displayArea();
}
}
在上面的代码示例中,Shape
是一个基类,Rectangle
是一个派生类。Shape
类包含了一个