面向对象编程的六大原则?
记忆:单开里迪,依赖接口
- 单一职责:对象设计要求独立,不能设计万能对象。
- 开闭原则:对象修改最小化。
- 里式替换:程序扩展中抽象被具体可以替换(接口、父类、可以被实现类对象、子类替换对象)
- 迪米特:高内聚,低耦合。尽量不要依赖细节。
- 依赖倒置:面向抽象编程。也就是参数传递,或者返回值,可以使用父类类型或者接口类型。从广义上讲:基于接口编程,提前设计好接口框架。
- 接口隔离:接口设计大小要适中。过大导致污染,过小,导致调用麻烦。
数组到底是不是对象?
著作权归大彬所有 原文链接:https://www.topjavaer.cn/java/java-basic.html
访问修饰符
Java访问控制修饰符总结
| 修饰符 | 可见性 | 说明 |
|---|---|---|
public | 所有类可见 | 具有最高级别的访问权限。 |
protected | 同一包内和继承类(不同包)可见 | 提供比默认访问级别更高的权限,通常与继承结合使用。 |
| 默认(无修饰符) | 同一包内可见,其他包内不可见 | 如果没有使用任何修饰符,默认为包级别的访问权限。 |
private | 仅在声明它的类内部可见 | 提供最高级别的封装,对于外部类完全不可见。 |
Java中有四种主要的访问控制修饰符,用于控制类的成员(字段、方法等)的访问权限。这些修饰符按照访问权限逐渐降低的顺序排列:
1. public
- 可以被任何类访问,无论是否在同一包内。
- 具有最高的访问级别。
2. protected
- 可以被同一包内的类和继承类访问。
- 具有比默认访问级别更高的访问权限,但比
public低。
3. 默认(包级别)
- 如果没有使用任何修饰符,默认是包级别的访问权限。
- 可以被同一包内的类访问,但对于不在同一包内的类是不可见的。
4. private
- 只能被声明它的类内部访问。
- 提供最高级别的封装,对于外部类完全不可见。

重要注意事项:
-
封装:使用
private和protected有助于实现封装,隐藏内部实现细节。 -
继承:
protected通常与继承结合使用,允许子类访问父类的protected成员。 -
面向对象原则:访问控制修饰符有助于实现面向对象编程的封装、继承和多态原则。
-
安全性:选择适当的访问级别有助于确保代码的安全性和可维护性。
总体而言,Java的访问控制修饰符为程序员提供了灵活性,使其能够根据设计需求控制类成员的访问权限,从而更好地组织和保护代码。
泛型使用
Java 中泛型的使用涉及到类、接口、方法等不同的场景。以下是一些泛型的常见使用场景和示例:
1. 泛型类
// 泛型类class Box<T> { private T value;
// 构造方法 public Box(T value) { this.value = value; }
// 获取值的方法 public T getValue() { return value; }}
// 使用泛型类Box<Integer> integerBox = new Box<>(123);Box<String> stringBox = new Box<>("Hello");
// 获取值int intValue = integerBox.getValue();String stringValue = stringBox.getValue();2. 泛型接口
// 泛型接口interface Pair<K, V> { K getKey(); V getValue();}
// 实现泛型接口class OrderedPair<K, V> implements Pair<K, V> { private K key; private V value;
public OrderedPair(K key, V value) { this.key = key; this.value = value; }
@Override public K getKey() { return key; }
@Override public V getValue() { return value; }}
// 使用泛型接口Pair<String, Integer> pair = new OrderedPair<>("One", 1);System.out.println(pair.getKey() + ": " + pair.getValue());3. 泛型方法
// 泛型方法class Utils { //在方法定义中,使用了尖括号 <T> 来声明泛型类型 T,这表示这是一个泛型方法。 返回值是T public static <T> T getLastElement(T[] array) { return array[array.length - 1]; }}
// 使用泛型方法Integer[] intArray = {1, 2, 3, 4, 5};String[] stringArray = {"A", "B", "C"};
Integer lastInt = Utils.getLastElement(intArray);String lastString = Utils.getLastElement(stringArray);
System.out.println("Last Integer: " + lastInt);System.out.println("Last String: " + lastString);4. 通配符
// 使用通配符class Printer { public static void printList(List<?> list) { for (Object item : list) { System.out.print(item + " "); } System.out.println(); }}
// 使用通配符List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5);List<String> stringList = Arrays.asList("A", "B", "C");
Printer.printList(intList);Printer.printList(stringList);这些例子展示了 Java 中泛型的一些常见用法,包括泛型类、泛型接口、泛型方法以及通配符的使用。泛型使得代码更加灵活、类型安全,并提高了代码的重用性。
内部类
在 Java 中,内部类是在一个类的内部定义的类。有四种主要类型的内部类:成员内部类、局部内部类、匿名内部类和静态内部类。以下是它们的写法:
1. 成员内部类
成员内部类是定义在另一个类的内部的类。它可以访问外部类的成员,包括私有成员。
public class OuterClass { private int outerVar;
public class InnerClass { private int innerVar;
public void innerMethod() { // 可以访问外部类的成员 outerVar = 10; System.out.println("Inner Method"); } }}2. 局部内部类
局部内部类是定义在方法或作用域内的类,只在定义它的方法或作用域内可见。
public class OuterClass { public void outerMethod() { // 局部内部类 class LocalInnerClass { public void localMethod() { System.out.println("Local Method"); } }
LocalInnerClass localInner = new LocalInnerClass(); localInner.localMethod(); }}3. 匿名内部类
匿名内部类是没有类名的内部类,通常用于创建接口的实例。
public interface MyInterface { void myMethod();}
public class OuterClass { public void useInner() { // 匿名内部类 MyInterface myInterface = new MyInterface() { @Override public void myMethod() { System.out.println("Anonymous Inner Method"); } };
myInterface.myMethod(); }}4. 静态内部类
静态内部类是使用 static 修饰的内部类,不依赖于外部类的实例。可以直接通过外部类名访问。
public class OuterClass { private static int staticVar;
public static class StaticInnerClass { private int innerVar;
public void innerMethod() { // 可以访问外部类的静态成员 staticVar = 20; System.out.println("Static Inner Method"); } }}这是 Java 中内部类的常见写法。每种内部类都有其自身的使用场景和特点,选择合适的内部类类型取决于具体的需求。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时