继承的基本语法:
在JAVA语言中, 用extends关键字来表示一个类继承另一个类,例如:
public class Sub extends Base {
...
}
以上代码表明Sub类继承了Base类。那么Sub类到底继承了Base类的哪些东西呢?这需要分两种情况:
- 当Sub类和Base类位于同一个包中,Sub类继承了Base类中public、protected和默认级别的成员变量和成员方法。
- 当Sub类和Base类位于不同包中,Sub类继承了Base类中public、protected的成员变量和成员方法。
1、方法重载(Overload):
重载方法必须满足以下条件:
- 方法名相同。
- 方法的参数类型、个数、顺序至少有一项不同。
- 方法的返回类型可以不相同。
- 方法的修饰符可以不相同。
例如以下Simple类中已经定义了一个amethod()方法。
public class Simple {
public void amethod(int i, String s);
//加入其他方法
}
下面哪些方法可以加入到Simple类中,并且保证编译正确呢?
A)public void amethod(String s, int i){} (可以)
B)public int amethod(int i, String s){return 0;} (不可以)
C)private void amethod(int i, String mystring){} (不可以)
D)public void Amethod(int i, String s){} (可以)
E)abstract void amethod(int i); (不可以)
2、方法覆盖(Override):
覆盖方法必须满足多种约束:
(1)子类方法的名称、参数类型和返回类型必须和父类方法的名称、参数类型和返回类型一致。例如:以下代码将导致编译错误:
public class Base {
public void method() {...}
}
public class Sub extends Base {
public int method() { //编译错误,返回类型不一致
return 0;
}
}
(2)子类方法不能缩小父类方法的访问权限。例如:
public class Base {
public void method() {...}
}
public class Sub extends Base {
private void method() {...} //编译错误子类方法缩小了父类方法的访问权限
}
(3)子类方法不能抛出比父类方法更多的异常。子类方法抛出的异常必须和父类方法抛出的异常相同,或者子类方法抛出的异常是父类方法抛出的异常的子类。
例如,假设异常类ExceptionSub1和ExceptionSub2是ExceptionBase类的子类,则以下代码是合法的:
publc class Base {
void method() throws ExceptionBase {}
}
public class Sub1 extends Base {
void method() throws ExceptionSub1 {}
}
public class Sub2 extends Base {
void method() throws ExceptionSub1,ExceptionSub2 {}
}
public class Sub3 extends Base {
void method() throws ExceptkionBase {}
}
以下代码不合法:
public class Base {
void method() throws ExceptionSub1 {}
}
public class Sub1 extends Base {
void method() throws ExceptionBase {} //编译出错
}
public class Sub2 extends Base {
void method() throws ExceptionSub1,ExceptionSub2 {} //编译出错
}
(4)方法覆盖只存在于父类(包括直接父类和间接父类)之间。在同一个类中的方法只能重载,不能覆盖。
(5)父类的静态方法不能被子类覆盖为非静态方法。例如以下代码将编译错误:
public class Base {
public static void method() {...}
}
public class Sub extends Base {
public void method() {...} //编译出错
(6)子类可以定义与父类的静态方法同名的静态方法,以便在子类中可以隐藏父类的静态方法。在编译时,子类定义的静态方法也必须方法覆盖类似的约束:方法的参数签名一致,返回类型一致,不能缩小父类的访问权限,不能抛出更多的异常。
public class Base {
static int method(int i) throws BaseException() {return 0;}
}
public class Sub extends Base {
public static int method(int i) throws SubException() {return 0;}
}
(7)父类非静态方法不能被子类覆盖为静态方法。例如以下代码不合法:
public class Base {
void method() {}
}
public class Sub extends Base {
static void method() {} //编译出错
}
(8)父类的私有方法不能被子类覆盖。
(9)父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的抽象方法;二是子类重新声明父类的的,抽象方法。例如以下代码是合法的:
public abstract class Base {
abstract void method1();
abstract void method2();
}
public abstract Sub extends Base {
public void method1() {...} //实现method1()方法,并且扩大访问权限。
public abstract void method2() //重新声明method2()方法,仅扩大访问权限,但不实现。
}
(10)父类的非抽象方法可以被覆盖为抽象方法。例如以下代码是合法的:
public class Base {
void method() {}
}
public abstract class Sub extends Base {
public abstract void method(); //合法
}
3、方法覆盖与方法重载的异同
方法覆盖和方法重载具有以下相同点:
- 都要求方法同名。
- 都可以用于抽象方法和非抽象方法之间。
方法覆盖和方法重载不同点:
- 方法覆盖要求参数签名一致,而方法重载要求参数签名不一致。
- 方法覆盖要求返回类型必须一致,而方法重载对此不做限制。
- 方法覆盖只用于子类覆盖父类的方法,方法重载用于同一个类中的所有方法(包括从父类继承而来的方法)。
- 方法覆盖对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这方面没有任何限制 。
- 父类的一个方法只能被子类覆盖一次,而一个方法在所在的类中可以被重载多次。
以下是子类Sub覆盖了父类Base的method(int v)方法,并且提供了多种重载方法:
public class Base {
protected void method(int v) {}
private void method(String s){} //重载
}
public abstract class Sub extends Base {
public void method(int v) {} //覆盖
public int method(int v1, int v2) {return 0;} //重载
protected void method(String s) Exception {} //重载
abstract void method(); //重载
}
分享到:
相关推荐
【完整课程列表】 Java基础[01-Java概述]....Java基础[04-继承上].pdf Java基础[04-继承下].pdf Java基础[05-多线程].pdf Java基础[06-集合].pdf Java基础[07-IO].pdf Java基础[08-GUI].pdf Java基础[09-网络编程].pdf
java中的继承是一种面向对象编程的重要概念,它允许一个类继承另一个类的属性和方法。使用继承可以实现代码的重用和层次化组织。 要使用继承,需要定义一个子类(派生类)来继承一个父类(基类或超类)。子类可以...
六、 继承(面向对象特征之一)★★★★ 25 七、 接口(面向对象特征之一)★★★★ 28 八、 多态(面向对象特征之一)★★★★ 30 九、 java.lang.Object 31 十、 异常★★★★ 34 十一、 包(package) 37 十二、 ...
java
Java基础知识面试题(2022最新版) Java概述 ---------------- * 什么是Java?Java是一种高级的、基于对象的、面向网络的编程语言。 * Java的历史和发展,Java的版本发展:JDK1.5之后的三大版本:JVM、JRE、JDK。 ...
Java 基础知识点汇总 以下是 Java 基础知识点汇总的详细说明: ### 1. 面向对象的特征 面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它强调使用对象和类来组织和结构化代码。面向对象编程的...
"Java基础入门" 本资源摘要信息中,我们将从《Java基础入门》课后习题答案中提取相关的知识点,并对其进行详细的解释和分析。 一、Java 开发入门 在 Java 开发入门中,我们学习了 Java 的基本概念,包括 Java EE...
Java 基础知识点 1. 基本语法:Java 语言的基本语法包括变量声明、数据类型、运算符、控制结构、循环结构、数组等。例如,Java 中的基本数据类型有整数型(int)、浮点型(float)、字符型(char)等。 2. 控制...
JAVA基础-第4章继承与多态-练习题 本资源是关于JAVA基础的第四章继承与多态的练习题,涵盖了继承、多态、构造方法、方法覆盖、final类等知识点。本资源共有9道选择题,考察了程序员对JAVA语言的掌握程度。 在第1题...
Java基础知识是学习Java的基础,包括基本数据类型、运算符、控制结构、函数、数组、对象、继承、多态、抽象、接口等。学习者需要掌握这些基础知识,然后才能学习更高级的Java技术。 J2EE框架 J2EE(Java 2 ...
建议读者在阅读前具备Java的基础知识,包括类、对象、方法和成员变量等概念。 在阅读过程中,尝试编写简单的Java程序,创建并使用父类和子类。 建议通过阅读相关的Java教材或搜索资料,进一步扩展学习与继承相关的...
java 基础知识 电子书其中包含01 对象和包、02 继承、03 接口与内部类、04 线程
Java基础知识面试题 Java是一种广泛使用的编程语言,具有平台独立性、面向对象、简单性和安全性等特点。Java基础知识是每个Java开发人员必须掌握的基本技能。以下是Java基础知识面试题的相关知识点: 1. Java语言...
Java基础知识点pdf: 数据类型、继承、封装、多态、数组、循环、抽象类、接口、object类常用方法、异常处理机制
2. 课程包含: JDK安装、开发环境搭建,java编程基础知识,分支语句、循环语句、封装、继承、多态等并配备相应练习题,希望对大家有所帮助。 PS:只做java是动力节点的战略布局,让每位初学者顺利入门是动力节点零...
JAVA基础知识点(全面,基础),讲了String,接口,继承,io,反射等等!
Java基础知识课件 1. 引言 Java是一种广泛使用的编程语言,以其跨平台兼容性和健壮性而闻名。Java最初由Sun Microsystems(现为Oracle Corporation的一部分)开发,并于1995年发布。 2. Java的特点 -跨平台兼容性:...
Java 基础知识笔试题及答案 Java 是一种广泛使用的编程语言,它具有强大的功能和灵活性。本资源汇总了 Java 基础知识笔试题及答案,涵盖了 Java 的基本概念、数据类型、运算符、控制结构、函数、数组、集合框架、...
JAVA基础知识课件 适合初学者 包括 ch1 Java概述 ch2 Java基本语法 ch3 类与对象 ch4-1 继承、接口和多态 ch4-2 继承、接口和多态 ch5 常用Java类库 ch6 异常处理 ch7 IO流与文件读写 ch8-1 基于Swing的图形用户界面...
本文档提供了JAVA基础知识的复习笔记,涵盖了JAVA的基础概念、数据类型、运算符、控制流程、类和对象、继承、多态、抽象类和接口等方面的知识。 一、数据类型 在JAVA中,有以下几种基本数据类型: * 整数类型:...