目录
包的概念与应用
包的导入方式
静态导入特性
类的包管理
常用系统包介绍
抽象类解析
定义规范
使用要点
核心价值
接口详解
多接口实现
接口继承关系
实际应用案例
方法一:Comparable接口实现
方法二:Comparator比较器应用
Clonable接口与深度复制
抽象类与接口对比
包的概念与应用
在Java编程中,包(package)是组织代码结构的重要机制,其主要作用是确保类名的唯一性。例如,当多个开发者都创建了同名的Test类时,包可以避免命名冲突导致的编译错误。
包的导入方式
Java标准库提供了丰富的预定义类,例如:
public class Demo {
public static void main(String[] args) {
java.util.Date current = new java.util.Date();
System.out.println(current.getTime());
}
}
通过import语句可以简化引用:
import java.util.Date;
建议明确指定导入的具体类,避免使用通配符(*)导入整个包。
注意:Java的import与C++的#include有本质区别,它更类似于命名空间的概念。
静态导入特性
使用静态导入可以简化静态成员的调用:
import static java.lang.System.*;
public class Demo {
public static void main(String[] args) {
out.println("静态导入示例");
}
}
数学运算示例:
import static java.lang.Math.*;
public class Calculation {
public static void main(String[] args) {
double a = 3;
double b = 4;
double c = sqrt(pow(a,2) + pow(b,2));
}
}
类的包管理
基本规则:
- 使用package声明指定类所属包
- 建议使用公司域名的逆序作为包名前缀
- 包路径需与实际文件路径一致
- 未声明package的类属于默认包
常用系统包介绍
- java.lang:基础类库(String、Object等),自动导入
- java.lang.reflect:反射机制支持
- java.net:网络编程工具
- java.sql:数据库操作接口
- java.util:实用工具类(集合框架等)
- java.io:输入输出处理
抽象类解析
定义规范
抽象方法示例:
abstract class Shape {
abstract void draw();
}
关键特性:
1. 使用abstract修饰类和方法
2. 抽象方法无具体实现
3. 包含抽象方法的类必须声明为抽象类
4. 可以包含普通成员变量和方法
5. 不能被直接实例化
6. 设计目的就是被继承
7. 子类必须实现所有抽象方法
8. 不能与final、private、static等修饰符共用
使用要点
- 实例化限制:
Shape s = new Shape(); // 编译错误
- 访问控制:
abstract class Example {
abstract private void method(); // 非法组合
}
- 普通方法:
abstract class Demo {
void normalMethod() {
System.out.println("普通方法");
}
}
- 构造方法:
抽象类可以包含构造方法,用于初始化成员变量
核心价值
抽象类的主要价值在于为子类提供统一的模板,强制子类实现特定功能。
接口详解
接口是比抽象类更纯粹的抽象形式:
interface Drawable {
void render();
}
class Circle implements Drawable {
@Override
public void render() {
System.out.println("绘制圆形");
}
}
特性说明:
1. 使用interface关键字定义
2. 方法默认为public abstract
3. 变量默认为public static final
4. Java8开始支持default方法和static方法
5. 不能实例化
6. 通过implements实现
7. 支持向上转型
8. 实现类方法必须为public
9. 不包含构造方法和代码块
10. 生成独立字节码文件
多接口实现
Java通过接口实现多继承效果:
interface Flyable {
void takeOff();
}
interface Swimmable {
void dive();
}
class Duck extends Animal implements Flyable, Swimmable {
// 实现多个接口方法
}
接口继承关系
接口支持多继承:
interface Amphibious extends Flyable, Swimmable {}
实际应用案例
对象排序示例:
class Student implements Comparable<Student> {
private String name;
private int score;
@Override
public int compareTo(Student other) {
return this.score - other.score;
}
}
方法一:Comparable接口实现
方法二:Comparator比较器应用
class ScoreComparator implements Comparator<Student> {
@Override
public int compare(Student s1, Student s2) {
return s1.getScore() - s2.getScore();
}
}
Clonable接口与深度复制
浅拷贝问题:
Person p1 = new Person();
Person p2 = p1.clone();
p2.money.value = 100; // 影响p1
深度复制解决方案:
@Override
protected Object clone() {
Person copy = (Person)super.clone();
copy.money = (Money)money.clone();
return copy;
}
抽象类与接口对比
核心差异:
- 抽象类可包含具体实现,接口只能有抽象方法(Java8前)
- 抽象类使用继承关系,接口使用实现关系
- 抽象类强调"是什么",接口强调"能做什么"
文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/10260.html