本文共 5197 字,大约阅读时间需要 17 分钟。
在Java编程中,方法重写是面向对象编程中的一个重要概念。它描述了子类中出现与父类中完全相同的方法声明的现象。这种机制允许子类在继承父类功能的基础上,定义自己的独特逻辑和内容,从而实现对父类方法的拓展或修改。
方法重写的核心在于,当子类需要扩展父类的功能时,可以通过重写父类的方法来实现。这种机制特别适用于在保持原有功能的同时,添加新的功能或逻辑。例如,手机类中定义了一个call()
方法,用于打电话。但在新手机类中,除了继承父类的call()
方法,子类还可以添加一些额外的功能,如视频通话功能。
在实际开发中,方法重写常用于以下场景:
public class Phone { public void call(String name) { System.out.println("给" + name + "打电话"); }}public class NewPhone extends Phone { @Override public void call(String name) { System.out.println("打开视频功能"); super.call(name); // 调用父类的方法 }}
在上述代码中,NewPhone
类继承了Phone
类,并通过@Override
注解标注了对call()
方法的重写。子类在调用父类的方法之前,先输出了一个特定的日志信息,体现了对父类功能的扩展。
在Java中,@Override
注解可以帮助开发者验证方法重写是否正确。这可以避免因为方法参数类型不匹配等问题导致的编译错误。例如,子类方法的参数类型和顺序必须与父类方法完全一致,否则会报错。
在Java中,类继承是面向对象编程的核心机制之一。通过继承,子类可以继承父类的属性和方法,并根据自身的需求对这些属性和方法进行扩展或修改。
public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public int getAge() { return age; }}public class Teacher extends Person { public Teacher() { } public Teacher(String name, int age) { super(name, age); } public void teach() { System.out.println("教书育人"); }}public class Student extends Person { public Student() { } public Student(String name, int age) { super(name, age); } public void study() { System.out.println("好好学习,天天向上!!"); }}
在上述代码中,Teacher
和Student
类继承了Person
类。通过super
关键字,它们调用了父类的构造函数,并继承了父类的属性和方法。同时,子类各自定义了独特的方法,如teach()
和study()
,体现了多态的特点。
在Java编程中,类和包是基本的组织单位。为了简化代码中类的引用,Java提供了导包功能。通过导包,可以避免在使用类时需要写全类名,从而提高代码的可读性。
导包可以通过两种方式进行:
import cn.itcast.Teacher;import java.util.Scanner;
// cn.itcast.Teacher t1 = new cn.itcast.Teacher();java.util.Scanner sc = new java.util.Scanner(System.in);
权限修饰符(Access Modifier)用于控制类、方法、字段的访问范围。Java中的权限修饰符包括:private
、default
、protected
、public
。
权限修饰符决定了同一类、同一包、不同类或不同包中对字段或方法的访问权限。以下是详细的访问规则:
修饰符 | 同一类内 | 同一包内(子类无关) | 不同包的子类 | 不同包的无关类 |
---|---|---|---|---|
private | 可以 | 不可以 | 不可以 | 不可以 |
default | 可以 | 可以 | 不可以 | 不可以 |
protected | 可以 | 可以 | 可以 | 不可以 |
public | 可以 | 可以 | 可以 | 可以 |
public class Fu { private void show1() { System.out.println("private"); } void show2() { System.out.println("default"); } protected void show3() { System.out.println("protected"); } public void show4() { System.out.println("public"); } public static void main(String args[]) { Fu f = new Fu(); f.show1(); // private,不能在外部访问 f.show2(); // default,可在同一包访问 f.show3(); // protected,可在同一包或子类访问 f.show4(); // public,可在任何地方访问 }}
在上述代码中,Fu
类包含了不同权限修饰符的方法。通过创建Fu
对象f
,可以分别调用这些方法,观察它们的访问权限。
final
是Java中的一个关键字,用于修饰成员方法、成员变量和类。final
表示“最终态”,意味着一旦被修饰的元素被创建后,不能再被修改或拓展。
public class Fu { public final void method() { System.out.println("Fu method"); }}public class Zi extends Fu { public final int age = 20; // 常量 public void show() { System.out.println(age); // age不能被重新赋值 } // public void method() { // System.out.println("Zi method"); // }}
在上述代码中,Zi
类继承了Fu
类,并通过final
修饰符确保了age
变量是常量,无法被重新赋值。同时,method()
方法也被final
修饰,表示不能被重写。
static
(静态)是Java中的关键字,用于修饰成员变量和成员方法。静态成员可以被类名直接调用,也可以通过对象名调用。与final
不同,静态成员可以被多个对象共享。
public class Student { public static String university; // 静态成员变量 private String name; private int age; public void show() { System.out.println(name + "," + age + "," + university); }}
在上述代码中,university
是Student
类的静态成员变量,可以通过Student.university
或Student
对象访问。这种设计使得university
信息可以被多个Student
对象共享。
静态方法的特点是其可以被类名和所有对象共享,并且它们的执行环境是与类加载相关联的。与非静态方法不同,静态方法不能访问非静态成员变量。
public class Student { private static String university = "南开大学"; private String name; private int age; public static void show4() { System.out.println("南开大学"); }}
在上述代码中,show4()
是静态方法,可以通过Student.show4()
或Student
对象调用。由于university
是静态变量,静态方法可以直接访问它。
public class Student { private static String university = "南开大学"; private String name; private int age; public static void show3() { System.out.println("南开大学"); } public void show1() { System.out.println("非静态方法"); }}
在上述代码中,show3()
是静态方法,可以直接调用Student.show3()
。而show1()
是非静态方法,可以通过Student
对象调用。
通过以上内容,我们可以看到Java编程中的一些核心概念,包括方法重写、类继承、导包、权限修饰符、final
和static
修饰符。这些概念是Java编程的基础,理解它们对于编写高质量的Java代码至关重要。在实际开发中,合理地使用这些概念可以帮助我们构建更灵活、更可维护的代码。
转载地址:http://klqg.baihongyu.com/