19. 解释一下 Java 中的封装、继承和多态。
封装、继承和多态是面向对象编程(OOP)的三个核心概念,在Java中得到了广泛应用。
-
封装:
-
概念:封装是指隐藏一个对象的内部细节,仅对外暴露需要公开的部分。这可以通过访问修饰符(如private, protected, public)来实现。
-
目的:确保对象的安全性,防止外部直接访问对象内部数据,提高代码的模块性和可维护性。
-
示例:
public class Person {private String name; // 私有属性,外部不能直接访问// 对外提供的公共方法来访问私有属性public String getName() {return name;}public void setName(String name) {this.name = name;} }
-
-
继承:
-
概念:继承是允许子类(派生类)继承父类(基类)的属性和行为的过程。子类可以添加新的属性和行为,也可以重写父类的方法。
-
目的:实现代码复用,减少冗余代码。
-
示例:
class Animal {void makeSound() {System.out.println("Animal makes a sound");} }class Dog extends Animal {// Dog类继承自Animal类void makeSound() {System.out.println("The dog barks");} }
-
-
多态:
-
概念:多态是指允许不同类的对象对同一消息做出响应的能力。在Java中,多态通常通过接口和继承实现。
-
类型:
- 编译时多态(方法重载)
- 运行时多态(方法重写)
-
目的:提供了一种接口,让代码可以对新的子类类型透明,增强了程序的可扩展性和灵活性。
-
示例:
class Bird {void makeSound() {System.out.println("Bird makes a sound");} }class Sparrow extends Bird {void makeSound() {System.out.println("Sparrow chirps");} }public class Test {public static void main(String[] args) {Bird myBird = new Sparrow(); // Sparrow对象被当作Bird类型处理myBird.makeSound(); // 输出 "Sparrow chirps"} }
-
以上就是封装、继承和多态的简要解释和代码示例。它们是面向对象编程的基石,对于设计和实现模块化、可维护、可扩展的软件系统至关重要。
20. Java 中的访问修饰符有哪些?它们之间的区别是什么?
Java 中有四个访问修饰符,它们用于控制类成员(字段、方法、构造函数和嵌套类)的访问级别。以下是这些访问修饰符以及它们之间的区别:
-
private:这是限制性最强的访问修饰符。被声明为
private
的成员只能在声明它们的类内部被访问。-
示例:
public class MyClass {private int privateField;private void privateMethod() {// 可以访问 privateField 和其他 private 方法} }
-
-
default(默认):如果一个成员没有指定任何访问修饰符,则它有一个默认的访问级别,也称为包私有(package-private)。这意味着它可以被同一个包内的任何其他类访问,但不可被该包之外的类访问。
-
示例:
class MyClass {// 默认访问修饰符,没有关键字int defaultField;void defaultMethod() {// 可以被同一包的其他类访问} }
-
-
protected:受保护的成员可以在声明它们的类的子类中访问,也可以被同一包内的所有其他类访问。
-
示例:
public class ParentClass {protected int protectedField;protected void protectedMethod() {// 可被子类访问} }class ChildClass extends ParentClass {void method() {// 可以访问父类的 protectedField 和 protectedMethod} }
-
-
public:这是限制性最弱的访问修饰符。被声明为
public
的成员可以从任何地方访问,没有任何限制。-
示例:
public class MyClass {public int publicField;public void publicMethod() {// 可以被任何其他类访问} }
-
以下是这些访问修饰符之间区别的表格形式总结:
访问修饰符 | 同类 | 同包 | 子类 | 不同包 |
---|---|---|---|---|
private | Y | N | N | N |
default | Y | Y | N | N |
protected | Y | Y | Y | N |
public | Y | Y | Y | Y |
不同的访问修饰符提供了不同级别的封装,允许开发者精确控制代码的哪些部分是可见的,哪些是隐藏的。这是面向对象编程中一个重要的概念,有助于提高代码的安全性和可维护性。