1.多态的使用场景和优缺点
// 定义动物类
class Animal {
public void makeSound() {
System.out.println("动物发出声音");
}
}
// 定义狗类
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("汪汪汪");
}
}
// 定义猫类
class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("喵喵喵");
}
}
public class Main {
public static void main(String[] args) {
// 使用多态,父类引用指向子类对象
Animal animal1 = new Dog();
Animal animal2 = new Cat();
// 调用相同的方法,会根据对象的实际类型调用对应的方法
show(animal1); // 输出:汪汪汪
show(animal2); // 输出:喵喵喵
}
public static void show(Animal p){
p.makeSound();
}
}
优点:便于扩展和维护
例如:
Person person = new Student();
person.work(); // 多态new出来的对象调用woek方法
但是当业务发生了变化时,我需要一个新对象【可以是老师、助教等,但是必须是Person的子类】 只需要修改 new Student();即可
缺点:不能使用子类的特定功能。
重载和重写的区别
在Java中,重载(overloading)和重写(overriding)是面向对象编程中两个重要的概念,它们有着不同的含义和用法。
重载(Overloading):
重载指的是在同一个类中定义多个方法,它们具有相同的方法名,但是参数列表不同(包括参数的类型、个数、顺序)。
编译器根据方法的参数列表来决定调用哪个版本的方法。
重载方法之间可以有不同的返回类型,但是不能仅仅通过返回类型的不同来重载方法。
重载方法可以发生在同一个类中,也可以发生在父类和子类之间。
示例:
同一个类中
public class OverloadExample {
public void print(int num) {
System.out.println("Printing integer: " + num);
}
public void print(String str) {
System.out.println("Printing string: " + str);
}
}
父类和子类之间
class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
public void sound(String bark) {
System.out.println("Dog barks: " + bark);
}
}
重写(Overriding):
重写指的是子类重新定义(覆盖)了父类中的某个方法,方法名、参数列表和返回类型必须与父类中被重写的方法完全相同。
重写发生在子类和父类之间,用于实现多态性。
在运行时,实际调用的是子类重写后的方法,而不是父类的方法。
示例:
class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("Dog barks");
}
}
在这个示例中,Dog 类重写了 Animal 类的 sound() 方法。
总结:
重载用于实现同一类中的方法多态性,而重写用于子类和父类之间的方法多态性。
重载方法的决定在编译时进行,而重写方法的决定在运行时进行。
重载方法的方法签名(包括方法名和参数列表)必须不同,而重写方法的方法签名必须相同。
重写方法不能降低父类方法的访问权限,但可以提高它的访问权限,比如从 protected 提升到 public。
2.MySQL表中char和varchar的区别
1.存储方式:
●CHAR: 固定长度的字符类型。当你创建一 个CHAR 类型的列时,你需要指定它的长度,如果存储的字符
长度小于指定的长度,MySQL 会用空格来填充,直到达到指定的长度。
●VARCHAR :可变长度的字符类型。它只会存储实际的字符数据,不会填充额外的空格。
2.存储空间:
●CHAR :固定长度,无论存储的实际数据长度是多少,都会占用指定长度的存储空间。
●VARCHAR :可变长度,它会根据存储的实际数据长度来分配存储空间,实际存储的数据长度加上一个字节
用于存储长度信息。
3.性能影响:
●CHAR :由于它是固定长度的,对于定长的数据查询效率会更高一些,但是对于变长数据会浪费一 些存储
空间。
●VARCHAR: 由于它是可变长度的,对于变长的数据会更加节省存储空间,但是在查询时可能会稍微慢一
些。
4.选择:
●如果你的数据是固定长度的,或者长度变化不大,可以选择CHAR 类型。
●如果你的数据长度变化较大,或者大多数情况下存储的是较短的字符串,可以选择VARCHAR 类型。
总的来说,CHAR 适合存储定长数据,而VARCHAR 适给存储变长数据。
redis的五种常见数据类型
redis常用的五种数据类型:string(字符串),hash(哈希),list(列表),set(无序集合)及zset(有序集合);
3.MySQL表中char和varchar的区别
在MySQL中,CHAR 和 VARCHAR 都是用来存储字符数据的数据类型,它们之间有一些区别:
-
存储方式:
CHAR:固定长度的字符类型。当你创建一个 CHAR 类型的列时,你需要指定它的长度,如果存储的字符长度小于指定的长度,MySQL 会用空格来填充,直到达到指定的长度。
VARCHAR:可变长度的字符类型。它只会存储实际的字符数据,不会填充额外的空格。 -
存储空间:
CHAR:固定长度,无论存储的实际数据长度是多少,都会占用指定长度的存储空间。
VARCHAR:可变长度,它会根据存储的实际数据长度来分配存储空间,实际存储的数据长度加上一个字节用于存储长度信息。 -
性能影响:
CHAR:由于它是固定长度的,对于定长的数据查询效率会更高一些,但是对于变长数据会浪费一些存储空间。
VARCHAR:由于它是可变长度的,对于变长的数据会更加节省存储空间,但是在查询时可能会稍微慢一些。 -
选择:
如果你的数据是固定长度的,或者长度变化不大,可以选择 CHAR 类型。
如果你的数据长度变化较大,或者大多数情况下存储的是较短的字符串,可以选择 VARCHAR 类型。
总的来说,CHAR 适合存储定长数据,而 VARCHAR 适合存储变长数据。
4.讲讲你对java语言的理解
Java是一种高级编程语言,最初由Sun Microsystems于1995年发布。它是一种面向对象的语言,具有跨平台的特性,因此被广泛用于开发各种类型的应用程序,包括桌面应用程序、Web应用程序、移动应用程序和企业级应用程序。
以下是我对Java语言的一些理解:
- 面向对象(OO)特性:Java是一种纯面向对象的编程语言,支持封装、继承和多态等特性。这使得Java程序具有模块化、可维护性和可扩展性。
- 跨平台性:Java的“编写一次,到处运行”(Write Once, Run Anywhere,WORA)的特性使得Java程序可以在不同的操作系统上运行,只需要在目标平台上安装对应的Java虚拟机(JVM)即可。
- 内存管理:Java具有自动内存管理机制,即垃圾回收器会自动回收不再使用的内存,从而减少了内存泄漏和野指针等问题。
- 强类型语言:Java是一种强类型语言,所有变量在使用之前必须声明其类型,这有助于提高代码的可读性和稳定性。
- 异常处理:Java通过try-catch-finally语句提供了强大的异常处理机制,可以有效地处理程序中的异常情况,提高了程序的健壮性。
- 多线程支持:Java提供了多线程编程的支持,可以方便地创建和管理多个线程,实现并发执行,从而提高程序的性能和响应能力。
- 丰富的类库:Java提供了丰富的标准类库(Java API),包括用于网络通信、数据库连接、图形界面开发等方面的类和接口,开发人员可以直接使用这些类库来加速开发过程。
- 开发工具支持:Java拥有众多成熟的集成开发环境(IDE),如Eclipse、IntelliJ IDEA和NetBeans等,这些工具提供了强大的功能,如代码自动完成、调试、代码重构等,大大提高了开发效率。
总的来说,Java是一种功能强大、灵活性高、跨平台的编程语言,适用于各种类型的应用开发,是目前世界上最流行的编程语言之一。