博客
关于我
方法重写
阅读量:361 次
发布时间:2019-03-05

本文共 5197 字,大约阅读时间需要 17 分钟。

Java核心概念解析:方法重写与类继承

在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("好好学习,天天向上!!");    }}

    在上述代码中,TeacherStudent类继承了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中的权限修饰符包括:privatedefaultprotectedpublic

    权限修饰符的访问规则

    权限修饰符决定了同一类、同一包、不同类或不同包中对字段或方法的访问权限。以下是详细的访问规则:

    修饰符 同一类内 同一包内(子类无关) 不同包的子类 不同包的无关类
    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修饰符的作用

    final是Java中的一个关键字,用于修饰成员方法、成员变量和类。final表示“最终态”,意味着一旦被修饰的元素被创建后,不能再被修改或拓展。

    final修饰符的特点

  • 方法:修饰的方法不能被重写。
  • 变量:修饰的变量是常量,不能再次被赋值。
  • :修饰的类不能被继承。
  • 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修饰符的作用

    static(静态)是Java中的关键字,用于修饰成员变量和成员方法。静态成员可以被类名直接调用,也可以通过对象名调用。与final不同,静态成员可以被多个对象共享。

    static修饰符的特点

  • 成员变量:静态变量可以被类名和所有对象共享。
  • 成员方法:静态方法可以被类名和所有对象共享。
  • 调用方式:可以通过类名或对象名调用,推荐使用类名。
  • static成员变量的示例

    public class Student {    public static String university; // 静态成员变量    private String name;    private int age;    public void show() {        System.out.println(name + "," + age + "," + university);    }}

    在上述代码中,universityStudent类的静态成员变量,可以通过Student.universityStudent对象访问。这种设计使得university信息可以被多个Student对象共享。


    static方法的特点

    静态方法的特点是其可以被类名和所有对象共享,并且它们的执行环境是与类加载相关联的。与非静态方法不同,静态方法不能访问非静态成员变量。

    static方法的示例

    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是静态变量,静态方法可以直接访问它。


    static与非static方法的区别

    • 静态方法:只能访问静态成员变量和静态方法。
    • 非静态方法:可以访问静态成员变量和静态方法,也可以访问非静态成员变量和非静态方法。

    一个静态方法的示例

    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编程中的一些核心概念,包括方法重写、类继承、导包、权限修饰符、finalstatic修饰符。这些概念是Java编程的基础,理解它们对于编写高质量的Java代码至关重要。在实际开发中,合理地使用这些概念可以帮助我们构建更灵活、更可维护的代码。

    转载地址:http://klqg.baihongyu.com/

    你可能感兴趣的文章
    openstack安装(九)网络服务的安装--控制节点
    查看>>
    shell编程(六)语言编码规范之(变量)
    查看>>
    vim杂谈(三)之配色方案
    查看>>
    vim杂谈(五)之vim不加载~/.vimrc
    查看>>
    Linux杂谈之终端快捷键
    查看>>
    vimscript学习笔记(二)预备知识
    查看>>
    vimscript学习笔记(三)信息打印
    查看>>
    awk杂谈之数组习题
    查看>>
    SSM项目中遇到Could not autowire. No beans of ‘XXX‘ type found.错误
    查看>>
    Linux网络属性配置详解
    查看>>
    Python(三十)类的理解
    查看>>
    Extjs布局详解
    查看>>
    Android数据库
    查看>>
    Linux基础命令(十四)软件安装的后续
    查看>>
    HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
    查看>>
    keil左侧文件调整方法
    查看>>
    本地分支关联远程分支
    查看>>
    STM8 GPIO模式
    查看>>
    python多态和封装
    查看>>
    STM32boot启动
    查看>>