当前位置: 首页 > news >正文

java复习 02

谢谢伟大的ai给我出卷子,,谢谢,,谢谢大模型,感恩,我像是一只皮革。。。。

1 实现接口必须实现其所有抽象方法,否则类必须声明为抽象类。

2 子类重新实现父类同名方法称为方法重写,需遵循 "两同两小一大" 原则

在 Java 的方法重写(覆盖,Overriding) 中,子类重写父类方法时需要遵循 “两同两小一大” 原则,这是确保重写合法性和多态正确性的关键规则。以下是对该原则的详细解析:

一、两同

1. 方法名相同

子类重写的方法必须与父类被重写的方法完全同名
示例

java

class Parent {public void show() { ... } // 父类方法名是 show
}
class Child extends Parent {public void show() { ... } // 子类方法名必须也是 show
}
2. 参数列表相同

子类方法的参数类型、顺序、数量必须与父类方法完全一致,不能修改参数列表。
示例

java

class Parent {public void print(int num) { ... } // 父类参数是 int
}
class Child extends Parent {public void print(int num) { ... } // 子类参数必须也是 int,不能改为 long 或其他类型
}

二、两小

1. 子类方法的返回值类型小于或等于父类方法的返回值类型
  • 若父类方法返回基本数据类型,子类返回值类型必须与父类完全相同
    示例

    java

    class Parent {public int getNum() { return 1; } // 父类返回 int
    }
    class Child extends Parent {public int getNum() { return 2; } // 子类必须也返回 int,不能改为 long
    }
    
  • 若父类方法返回引用数据类型(如类),子类返回值类型必须是父类返回值类型的子类或相同类型(称为 协变返回类型)。
    示例

    java

    class Animal { ... }
    class Dog extends Animal { ... }class Parent {public Animal getPet() { return new Animal(); } // 父类返回 Animal
    }
    class Child extends Parent {public Dog getPet() { return new Dog(); } // 子类返回 Dog(Animal 的子类),合法
    }
    
2. 子类方法声明抛出的异常类型小于或等于父类方法声明抛出的异常类型
  • 子类方法可以声明抛出父类方法异常的子类不抛出异常,但不能抛出父类方法未声明的更宽泛的异常
    示例

    java

    import java.io.IOException;class Parent {public void work() throws IOException { ... } // 父类抛出 IOException
    }
    class Child extends Parent {public void work() throws FileNotFoundException { ... } // FileNotFoundException 是 IOException 的子类,合法
    }
    
     
    • 若父类方法未声明抛出异常,子类方法不能声明抛出受检异常(但可以抛出非受检异常,如 RuntimeException)。

三、一大

子类方法的访问权限大于或等于父类方法的访问权限
  • 父类方法的访问修饰符决定了子类方法的最低权限要求:
    父类方法修饰符子类方法允许的修饰符示例(父类方法)子类合法修饰符
    private只能在子类中重新定义为 privateprivate void method()必须也是 private
    默认(包访问)可以是 默认protectedpublicvoid method()protectedpublic
    protected可以是 protectedpublicprotected void method()public
    public必须是 publicpublic void method()只能是 public
  • 核心逻辑:子类不能缩小父类方法的访问范围,否则会破坏多态的可用性(例如,父类引用调用子类方法时可能因权限不足无法访问)。

四、违反原则的后果

若不遵循 “两同两小一大” 原则,编译器会报错,提示 “方法未正确覆盖父类方法”。例如:

  • 改方法名 → 变成方法重载,而非重写。
  • 改参数列表 → 变成方法重载,父类方法未被覆盖。
  • 缩小访问权限 → 编译错误(如父类方法是 public,子类改为 protected)。

五、总结图示

plaintext

父类方法:
修饰符 返回值 方法名(参数列表) throws 异常列表 { ... }子类重写要求:
↓        ↓       ↓          ↓              ↓
│        │       │          │              ├─ 异常类型 ≤ 父类异常(两小)
│        │       │          ├─ 参数列表必须相同(两同)
│        │       └─ 方法名必须相同(两同)
│        └─ 返回值类型 ≤ 父类返回值(两小)
└─ 修饰符 ≥ 父类修饰符(一大)

通过遵循该原则,可确保多态机制在运行时正确调度子类方法,避免逻辑错误和编译问题。

3 接口中的方法默认是public abstract(可省略),属性默认是public static final

super可调用父类构造方法、成员方法或属性。 

final修饰的类不可被继承,修饰的方法不可被重写。 

6 一个对象只能属于一个类,但可实现多个接口。

7 构造方法不能被继承,但子类构造默认调用父类无参构造。

8 抽象类可以不含抽象方法,但含抽象方法的类必须声明为抽象类。

9 面向对象三大特征

  • 封装
    将数据(属性)和操作(方法)绑定为一个整体,并隐藏内部细节。
    示例

    java

    public class Person {private String name; // 私有属性,外部不可直接访问public String getName() { return name; } // 公共访问方法
    }
    
  • 继承
    子类继承父类的属性和方法,实现代码复用和扩展。
    示例

    java

    class Animal { void eat() { ... } }
    class Dog extends Animal { void bark() { ... } } // Dog继承eat()方法
    
  • 多态
    同一操作作用于不同对象,产生不同行为。
    示例

    java

    Animal a = new Dog(); // 父类引用指向子类对象
    a.eat(); // 调用Dog重写的eat()方法
    

10 接口与抽象类的区别

维度接口抽象类
结构仅含抽象方法和常量含抽象方法、非抽象方法和变量
继承限制允许多实现(implements)单继承(extends)
成员修饰符方法默认public abstract,属性默认public static final无强制要求
设计目的定义行为规范,实现 "has-a" 关系定义共性,实现 "is-a" 关系

11  方法重载与方法重写的区别

维度方法重载(Overloading)方法重写(Overriding)
范围同一个类中子类与父类间
条件方法名相同,参数列表不同方法名、参数列表、返回类型均相同
机制编译时多态(静态绑定)运行时多态(动态绑定)
访问权限无限制子类权限≥父类权限
http://www.lqws.cn/news/105193.html

相关文章:

  • 2.3 关于async/await的原理介绍
  • IBM DB2分布式数据库架构
  • Baklib内容中台AI重构智能服务
  • 秋招准备-数据结构
  • Java-IO流之字节输入流详解
  • MFC Resource.h 文件详解与修改指南
  • 网络安全-等级保护(等保)3-0 等级保护测评要求现行技术标准
  • 强制卸载openssl-libs导致系统异常的修复方法
  • C++仿RabbitMQ实现消息队列
  • WINUI——Magewell视频捕捉开发手记
  • RabbitMQ在SpringBoot中的应用
  • Easyui悬停组件
  • 机器学习——放回抽样
  • Vue3中Axios的使用-附完整代码
  • 12、企业应收账款(AR)全流程解析:从发票开具到回款完成
  • BugKu Web渗透之game1
  • 倚光科技:Zernike自由曲面转菲涅尔,反射镜及透镜加工技术革新
  • 鸿蒙5.0项目开发——横竖屏切换开发
  • 解锁电商新势能:商城系统自动 SaaS 多开功能深度解析
  • Redis中的fork操作
  • browser-use Agent 日志链路分析
  • Nginx + Tomcat 负载均衡、动静分离群集
  • CMS32M65xx/67xx系列CoreMark跑分测试
  • dvwa6——Insecure CAPTCHA
  • 【机器学习及深度学习】机器学习模型的误差:偏差、方差及噪声
  • 机器学习:集成学习概念、分类、随机森林
  • [P2P]并发模式
  • 亚远景科技助力东风日产通过ASPICE CL2评估
  • Unity——QFramework框架 内置工具
  • 利用lightgbm预测adult数据集