我来详细讲解一下Java中的封装、继承和多态。
封装
封装是一种面向对象编程的概念,它在Java中的实现是使用类和访问控制修饰符来保护数据和行为的访问权限。封装可以让设计者隐藏类的实现细节,将类的接口与实现分离,提高代码的复用性和安全性。
在Java中,我们可以使用public、private、protected和default修饰符来控制访问权限。其中,public表示公开的,任何人都可以访问;private表示私有的,只有类内部可以访问;protected表示受保护的,只有该类的子类和同一包下的类可以访问;default表示默认的,只有同一包下的类可以访问。
下面是一个示例,演示了如何使用封装来保护数据:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
Person p = new Person("Tom", 18);
System.out.println(p.getName()); //可以访问
p.setName("Jerry"); //可以访问
p.setAge(-1); //无法访问,因为age是私有的
}
}
继承
继承是一种面向对象编程的概念,它允许我们基于已有的类创建新的类,并从原来的类继承所有的字段和方法。继承可以大大简化代码的创建和管理,提高代码重用性。
在Java中,我们使用extends关键字来实现继承。子类继承父类的所有public和protected成员,私有的成员不能被继承。子类可以重写/覆盖父类的方法,也可以新添加自己的方法和属性。
下面是一个示例,演示了如何使用继承来实现一个基础的形状类:
public class Shape {
protected double area;
public void calculateArea() {
//计算面积
}
public void printArea() {
System.out.println("面积是:" + area);
}
}
public 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 r = new Rectangle(3, 4);
r.calculateArea();
r.printArea();
}
}
多态
多态是一种面向对象编程的概念,它允许我们使用父类类型的引用来引用子类类型的对象,从而实现代码的灵活性和可扩展性。在Java中,多态具体有两种实现方式:方法重载和方法覆盖。
方法重载是指在同一个类中,可以定义多个方法名相同,但参数类型/个数/顺序不同的方法。Java编译器会根据不同的参数来自动选择不同的方法。
方法覆盖是指在子类中重载父类的方法。子类中重新定义与父类中同名、参数数量类型完全相同的方法,这种方法覆盖即为覆盖。
下面是一个示例,演示了如何使用多态来实现不同形状的面积计算:
public class Shape {
protected double area;
public void calculateArea() {
//计算面积
}
public void printArea() {
System.out.println("面积是:" + area);
}
}
public 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 Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public void calculateArea() {
area = Math.PI * radius * radius;
}
}
public class Main {
public static void main(String[] args) {
Shape s1 = new Rectangle(3, 4);
s1.calculateArea();
s1.printArea();
Shape s2 = new Circle(2.5);
s2.calculateArea();
s2.printArea();
}
}
以上就是Java中封装、继承、多态的详细讲解和示例,请仔细学习。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Java中的封装、继承、多态 - Python技术站