10.多态
多态的概念
多态(Polymorphism)是面向对象编程的核心概念之一,它指的是同一个接口可以被多个不同的类实现,或者同一个操作作用于不同的对象时可以有不同的解释和行为。
为何要用多态
多态的使用使得代码更加灵活和可扩展,它允许编写的代码可以对不同类型的对象执行不同的操作。
多态的优点
- 解耦:多态减少了类与类之间的耦合,提高了代码的可维护性。
- 扩展性:通过多态,可以轻松添加新的类,而无需修改现有的代码。
- 灵活性:多态允许使用统一的接口来处理不同类型的对象。
多态的分类
- 重载(Overloading):编译时多态,方法名相同,参数列表不同。
- 重写(Overriding):运行时多态,子类重写父类的方法。
- 泛型(Generics):在编译时提供类型安全。
- 接口多态:实现接口的不同类可以有不同的实现。
多态的机制原理
Java中的多态主要通过以下几个机制实现:
- 方法重写:子类可以重写父类的方法,当调用子类对象的方法时,将调用子类重写的方法。
- 动态绑定:在运行时,Java虚拟机(JVM)根据对象的实际类型来选择调用哪个方法。
- 接口实现:类实现接口时,可以提供接口方法的具体实现,不同的实现类可以有不同的行为。
示例代码
// 父类
class Animal {
void makeSound() {
System.out.println("Animal makes a sound");
}
}
// 子类重写父类方法
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Dog barks");
}
}
// 子类
class Cat extends Animal {
@Override
void makeSound() {
System.out.println("Cat meows");
}
}
// 使用多态
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDog = new Dog();
Animal myCat = new Cat();
// 多态的体现:通过父类引用调用子类的方法
myAnimal.makeSound(); // 输出: Animal makes a sound
myDog.makeSound(); // 输出: Dog barks
myCat.makeSound(); // 输出: Cat meows
// 运行时多态:JVM在运行时确定调用的方法
}
}
11.常用类
System类
System
类提供了一些与系统相关的方法,如:
System.out
:标准输出流。System.in
:标准输入流。System.exit(int status)
:终止程序并返回状态码。
Runtime类
Runtime
类允许与运行时环境进行交互,例如:
Runtime.getRuntime()
:获取运行时对象。exec(String command)
:执行指定的字符串命令。availableProcessors()
:返回可用的处理器数量。
String类
String
类用于表示和操作字符串。
字符串常量池
Java使用特殊的字符串常量池来存储字符串字面量,以节省内存。
常见方法
charAt(int index)
:返回字符串中指定位置的字符。indexOf(String s)
:返回子字符串第一次出现的索引。startsWith(String s)
:测试字符串是否以指定前缀开始。endsWith(String s)
:测试字符串是否以指定后缀结束。substring(int index)
:返回字符串的子字符串。substring(int startIndex, int endIndex)
:返回从startIndex
到endIndex - 1
的子字符串。replace(char a, char b)
:替换字符串中的字符。trim()
:去除字符串两端的空白。concat(String str)
:连接字符串。split(String regex)
:根据正则表达式拆分字符串。
正则表达式
正则表达式是一种文本模式,包括:
- 字符通配符:如
.
匹配任意单个字符。 - 次数通配符:如
*
表示前一个字符的零次或多次出现。 - 其他通配符:如
\d
匹配数字。
StringBuffer和StringBuilder
StringBuffer
:线程安全的可变字符串。StringBuilder
:非线程安全的,性能更优的可变字符串。
日期时间类
Date类
Date
类用于表示特定的瞬间,精确到毫秒。
SimpleDateFormat类
用于格式化和解析日期。
Calendar类
Calendar
类是一个抽象类,提供了一系列方法来操作日期和时间。
数字类
Math类
Math
类包含了一系列数学运算的方法,如:
abs()
:绝对值。sqrt()
:平方根。pow()
:指数。round()
:四舍五入。
包装类
包装类是基本数据类型的类形式。
什么是包装类
Java为每个基本数据类型提供了对应的包装类,如Integer
对应int
。
包装类的特点
- 提供了方法和属性。
- 可以为
null
。 - 可以用于泛型和集合。
基本数据类型与包装类
基本数据类型和包装类之间可以相互转换。
包装类共同点
所有包装类都继承自java.lang.Number
。
自动装箱/拆箱
Java自动将基本数据类型转换为对应的包装类(装箱),或将包装类转换为基本数据类型(拆箱)。
Integer num = 5; // 自动装箱
int i = num; // 自动拆箱
标签:java,String,子类,多态,笔记,System,Animal,字符串
From: https://www.cnblogs.com/cjsbx/p/18347025