Java 知识量:11 - 45 - 220
在Java中,类的种类可以根据不同的标准进行分类。以下是一些常见的分类方式:
1、根据类的访问修饰符分类:
公开类(Public Class):可以被任何其他类访问。
保护类(Protected Class):可以被同一个包中的类以及其他包中的子类访问。
默认类(Default Class):只能被同一个包中的类访问。
私有类(Private Class):只能被声明该类的类访问。
2、根据类的成员变量分类:
静态类(Static Class):只能包含静态成员变量和静态方法,不能实例化。
抽象类(Abstract Class):可以包含成员变量、方法和抽象方法,不能被实例化,可以用作基类。
最终类(Final Class):不能被继承,可以包含成员变量、方法和最终方法。
密封类(Sealed Class):在Java 17中引入,可以被用作密封类的基类,其子类必须在与密封类相同的模块中声明。
3、根据类的用途分类:
工具类(Utility Class):包含一组静态方法的类,用于执行某些特定任务。
实体类(Entity Class):用于表示现实世界中的实体,通常包含属性和行为。
数据访问对象(DAO Class):用于与数据库进行交互的类,通常包含CRUD(创建、读取、更新和删除)操作的方法。
服务类(Service Class):用于封装业务逻辑的类,通常包含实现业务功能的方法。
控制器类(Controller Class):用于处理用户请求的类,通常包含处理HTTP请求的方法。
4、根据类的继承关系分类:
基类(Base Class):被其他类继承的类。
子类(Subclass):继承基类的类。
接口(Interface):定义一组方法的契约,可以被类实现。
5、根据类的实例化分类:
单例类(Singleton Class):只能被实例化一次的类,常用于管理全局资源。
原型类(Prototype Class):可以通过克隆自身来创建新对象的类。
6、根据类的线程安全性分类:
线程安全类(Thread-Safe Class):可以在多线程环境下安全使用的类。
线程不安全类(Thread-Unsafe Class):需要在多线程环境下进行同步处理的类。
在Java中,抽象类是一种不能实例化的类,通常用作其他类的基类。抽象类可以包含抽象方法和非抽象方法。
抽象方法是一种只有声明没有实现的方法。抽象方法的声明以分号结尾,没有方法体。抽象方法的声明通常在抽象类中。
以下是一个简单的Java抽象类和抽象方法的例子:
public abstract class Animal { public abstract void makeSound(); public void eat(){ System.out.println("The animal eats"); } }
在这个例子中,Animal是一个抽象类,它有一个抽象方法makeSound()和一个非抽象方法eat()。
当创建Animal的子类时,必须提供makeSound()方法的实现。例如:
public class Dog extends Animal { public void makeSound() { System.out.println("The dog barks"); } }
在这个例子中,Dog是Animal的子类,它提供了makeSound()方法的实现。
引用类型转换(reference type conversion)是指将一个对象从一种类型转换为另一种类型。Java中的引用类型转换主要包括向上转型(upcasting)和向下转型(downcasting)。
1、向上转型(Upcasting):将子类的对象转型为父类类型,这是在Java中完全安全的。例如:
class Animal { void eat() { System.out.println("Animal eats"); } } class Dog extends Animal { void bark() { System.out.println("Dog barks"); } } public class Main { public static void main(String[] args) { Dog d = new Dog(); Animal a = d; // Upcasting a.eat(); } }
在这个例子中,Dog是Animal的子类,所以可以将Dog对象向上转型为Animal对象。在执行a.eat()时,实际执行的是Dog类的eat()方法。
2、向下转型(Downcasting):将父类类型的对象转为子类类型,这可能会引发ClassCastException。例如:
class Animal { void eat() { System.out.println("Animal eats"); } } class Dog extends Animal { void bark() { System.out.println("Dog barks"); } } public class Main { public static void main(String[] args) { Animal a = new Animal(); Dog d = (Dog) a; // Downcasting d.bark(); } }
在这个例子中,尝试将Animal对象向下转型为Dog对象,并调用bark()方法。但是,由于a实际上是一个Animal对象,不是Dog对象,所以会在运行时抛出ClassCastException。
在进行向下转型时,最好使用instanceof操作符来检查对象是否确实是所需的类型,以避免ClassCastException。例如:
if (a instanceof Dog) { Dog d = (Dog) a; d.bark(); } else { System.out.println("a is not a Dog"); }
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6